Maven 编译打包全指南:整体 / 逐个打包 + 核心参数详解

一、核心前置知识

Maven 生命周期(最常用 3 个):

  1. compile:仅编译源码,不打包
  2. package:编译 + 打包(jar/war),不安装到本地仓库
  3. install:编译 + 打包 + 安装到本地仓库(本地其他项目可依赖)

二、整体编译打包(多模块项目)

适用于:父工程 + 多个子模块,一次性编译打包所有模块及依赖。

1. 仅编译所有模块

复制代码
mvn compile

2. 编译 + 打包所有模块(最常用)

复制代码
mvn package

✅ 生成:每个模块 target 目录下的 jar/war✅ 自动处理:模块间依赖、第三方依赖

3. 编译 + 打包 + 安装到本地仓库

复制代码
mvn install

4. 跳过测试(开发必用,加速打包)

复制代码
mvn package -DskipTests

-DskipTests:编译测试类,但不执行测试用例

复制代码
mvn package -Dmaven.test.skip=true

-Dmaven.test.skip=true完全跳过测试编译 + 执行(更快)


三、逐个模块编译打包(单模块 / 指定模块)

适用于:只打包某个子模块,不编译整个项目。

1. 进入模块目录执行(推荐)

复制代码
# 进入子模块文件夹
cd user-service
# 仅编译
mvn compile
# 编译打包
mvn package
# 编译打包+跳过测试
mvn package -DskipTests

2. 不进入目录,指定模块打包(父工程下执行)

复制代码
mvn -pl 模块名 package

示例:

复制代码
mvn -pl user-service package -DskipTests

-pl = --projects:指定要打包的模块

3. 打包指定模块 + 同时打包它依赖的模块

复制代码
mvn -pl user-service -am package

-am = --also-make:自动构建当前模块依赖的其他子模块


四、Maven 编译核心参数(必背)

表格

参数 作用 常用场景
-DskipTests 跳过测试运行(仍编译测试代码) 快速打包
-Dmaven.test.skip=true 完全跳过测试(编译 + 运行都跳过) 极速打包
-pl moduleName 指定打包某个模块 单模块打包
-am 同时打包依赖的模块 多模块依赖打包
-P prod 指定环境配置(dev/test/prod) 多环境打包
-U 强制更新快照依赖 依赖更新不生效时用
-e 打印详细错误堆栈 排查打包失败
-X 调试模式(超详细日志) 深度排查问题
-Dmaven.compile.fork=true 多线程编译 加速大项目

五、高频实用命令合集(直接复制)

1. 项目整体快速打包(开发最常用)

复制代码
mvn package -DskipTests

2. 整体打包 + 强制更新依赖

复制代码
mvn package -U -DskipTests

3. 指定模块打包(含依赖模块)

复制代码
mvn -pl order-service -am package -DskipTests

4. 生产环境打包

复制代码
mvn package -P prod -DskipTests

5. 清理旧包 + 重新打包

复制代码
mvn clean package -DskipTests

clean:删除 target 目录,避免旧文件冲突


六、多模块项目最佳实践

  1. 父工程执行mvn clean package -DskipTests → 全量打包
  2. 修改单个模块 :进入模块目录执行 mvn package 或用 -pl 指定
  3. 依赖冲突 / 更新失败 :加 -U 参数强制更新
  4. 打包报错 :加 -e 查看错误详情

总结

  1. 整体打包mvn package -DskipTests
  2. 指定模块打包mvn -pl 模块名 -am package
  3. 核心加速-DskipTests-Uclean
  4. 排查错误-e-X
相关推荐
懒鸟一枚2 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123454 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ5 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案6 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅7 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp7 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4777 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困7 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY8 小时前
Integer类型超限,导致数据异常
java·算法