maven 打包命令怎么用?常用选项与执行示例
详细介绍 Maven 中 mvn package 命令的具体用法,包括清理构建、跳过测试、指定配置文件等常用选项,并提供单模块与多模块项目的实际执行示例,帮助开发者高效完成项目打包。
在 Java 项目开发中,将源代码编译并生成可部署的 JAR 或 WAR 文件是交付前的关键步骤。Maven 提供的 mvn package 命令能自动完成编译、测试和打包全过程,确保产物符合标准目录结构。掌握该命令及其常用选项,可以避免手动复制文件的错误,并显著缩短构建时间。下面展示一个标准的 Spring Boot 项目打包后的效果,生成的 JAR 文件位于 target 目录下。

target目录下生成的JAR文件及class文件结构
Maven 的生命周期包含 validate、compile、test、package 等阶段。执行 package 时,Maven 会依次执行之前的所有阶段。这意味着如果代码编译失败或单元测试未通过,打包过程会自动终止。理解这一机制有助于排查构建失败的原因,而不是仅仅关注最终的包文件。
开始操作前,请确保本地已安装 JDK 和 Maven,并在命令行中输入 mvn -v 确认环境正常。进入项目根目录,即包含 pom.xml 文件的文件夹,即可执行后续命令。
1. 执行基础打包命令
在项目根目录下打开终端或命令行工具,输入以下命令并回车:
mvn package
观察控制台输出,你会看到 Maven 依次执行 resources、compile、testResources、testCompile、test 和 package 插件目标。当出现 BUILD SUCCESS 字样时,表示打包成功。此时,打开项目下的 target 目录,可以看到生成的 JAR 或 WAR 文件。这是最基础的用法,适用于日常开发中的快速验证。

1. 执行基础打包命令
2. 清理旧构建并重新打包
如果之前构建过项目,target 目录中可能残留旧的类文件或配置。为了确保当前打包的是最新代码,通常建议先清理再打包。使用 clean 生命周期阶段可以删除 target 目录。
输入以下组合命令:
mvn clean package
执行后,Maven 会先删除 target 文件夹,然后重新创建并执行完整的构建流程。这种做法能避免因缓存导致的类冲突或资源未更新问题,是发布正式版本前的推荐操作。

控制台显示清理旧构建并重新打包的过程
3. 跳过测试以加速打包
在持续集成或紧急修复场景中,单元测试可能耗时较长。如果确信代码逻辑无误,可以通过参数跳过测试阶段,直接进行编译和打包。
使用 -DskipTests 参数:
mvn clean package -DskipTests
注意,该参数仅跳过测试用例的执行,但仍会编译测试代码。若需完全跳过测试代码的编译和执行,可使用 -Dmaven.test.skip=true。观察控制台,你会发现 Tests run 相关的日志消失,构建速度明显提升。但需谨慎使用此选项,确保不会将有缺陷的代码部署到生产环境。
4. 指定特定配置文件打包
许多项目区分开发、测试和生产环境,不同环境对应不同的数据库地址或 API 密钥。Maven 允许通过 Profile 机制切换配置。
假设 pom.xml 中定义了 id 为 prod 的 Profile,执行以下命令激活它:
mvn clean package -P prod
控制台会显示 The following profiles are active: prod。此时生成的包将包含生产环境的配置文件。若不指定 -P 参数,Maven 默认使用激活状态为 true 的 Profile 或无 Profile 的默认配置。这种方式实现了同一套代码在不同环境下的灵活部署。

激活prod Profile进行打包的命令与反馈
5. 多模块项目选择性打包
对于大型多模块项目,全量打包可能浪费资源。如果只修改了某个子模块,可以指定该模块进行打包。
使用 -pl (projects) 和 -am (also make) 参数:
mvn clean package -pl module-name -am
其中 module-name 是子模块的 artifactId。-am 确保该模块依赖的其他内部模块也会被先构建。观察输出日志,Maven 只会构建指定的模块及其依赖链,其他无关模块将被跳过。这在微服务架构或大型单体应用中能极大提高迭代效率。
最后,检查 target 目录下的产物大小和内容,确认是否包含预期的类和资源文件。保留包含 pom.xml 的项目根目录作为工作区,以便后续进行 install 或 deploy 操作。通过熟练运用这些选项,你可以更精准地控制 Maven 的构建行为,适应不同的开发节奏。

多模块项目中指定模块及其依赖的构建逻辑


































