Maven 的生命周期和常用命令

Maven 生命周期

Maven 有三套相互独立的生命周期:

生命周期 说明
default 构建项目的核心流程(编译、测试、打包、安装、发布)
clean 清理上次构建产物
site 生成项目站点文档

执行某个阶段时,该生命周期中之前的所有阶段都会自动执行。


default 生命周期关键阶段

validate → compile → test → package → verify → install → deploy
阶段 说明
validate 验证项目结构和配置是否正确
compile 编译主源码(src/main/java),生成 .class 文件到 target/classes
test 使用测试框架(JUnit)运行 src/test/java 下的单元测试
package 将编译结果打包为 jar / war / zip 等,放入 target/
verify 对集成测试结果进行验证
install 将包安装到本地 Maven 仓库(~/.m2/repository),供本地其他项目依赖
deploy 将包发布到远程仓库(Nexus / Artifactory 等)

常用命令速查

清理

mvn clean                      # 删除 target/ 目录

编译

mvn compile                    # 编译主源码
mvn test-compile               # 编译测试源码
mvn clean compile              # 清理后编译(验证代码能否通过编译)

测试

mvn test                       # 运行单元测试
mvn test -Dtest=FooTest        # 只跑指定测试类
mvn test -Dtest=FooTest#bar    # 只跑指定测试方法

打包

mvn package                    # 编译 + 测试 + 打包
mvn clean package              # 清理后打包
mvn clean package -DskipTests  # 跳过测试打包(加速)
mvn clean package -Dmaven.test.skip=true  # 跳过测试编译和运行

-DskipTests:跳过测试运行,但仍编译测试代码
-Dmaven.test.skip=true:连测试代码也不编译

安装到本地仓库

mvn install                    # 打包 + 安装到 ~/.m2
mvn clean install              # 清理后安装(多模块项目常用)
mvn clean install -DskipTests  # 跳过测试安装

多模块项目中,子模块 A 依赖子模块 B 时,必须先对 B 执行 install,否则 A 找不到依赖。

发布到远程仓库

mvn deploy                     # 安装 + 推送到远程仓库
mvn clean deploy -DskipTests   # 跳过测试发布

依赖管理

mvn dependency:tree                         # 打印依赖树
mvn dependency:tree -Dincludes=groupId:*    # 过滤指定 groupId
mvn dependency:analyze                      # 分析未使用/缺失依赖
mvn dependency:resolve                      # 下载所有依赖到本地仓库
mvn dependency:purge-local-repository       # 清除本地仓库中该项目的依赖缓存

查看项目信息

mvn help:effective-pom         # 查看最终生效的 pom(含父 pom 继承)
mvn help:effective-settings    # 查看生效的 settings.xml
mvn help:describe -Dplugin=compiler  # 查看插件说明
mvn versions:display-dependency-updates  # 检查依赖是否有新版本

多模块操作

mvn clean install -pl module-a            # 只构建指定模块
mvn clean install -pl module-a -am        # 构建指定模块及其依赖的模块
mvn clean install -pl module-a -amd       # 构建指定模块及依赖它的模块
mvn clean install --projects module-a,module-b  # 构建多个指定模块

跳过检查

-DskipTests                    # 跳过测试运行
-Dmaven.test.skip=true         # 跳过测试编译+运行
-Dcheckstyle.skip=true         # 跳过 checkstyle
-Dspotbugs.skip=true           # 跳过 spotbugs
-Dmaven.javadoc.skip=true      # 跳过 javadoc 生成

三个常用命令对比

命令 执行阶段 产物 适用场景
mvn clean compile compile .class 验证代码能否编译通过
mvn clean package package target/*.jar 构建产物,不入本地仓库
mvn clean install install target/*.jar + 本地仓库 多模块互相依赖时使用

clean 生命周期

阶段 说明
pre-clean 清理前执行
clean 删除 target/
post-clean 清理后执行

常用参数

参数 说明
-T 4 4 线程并行构建(多模块加速)
-T 1C 每个 CPU 核心 1 个线程
-o 离线模式,不从远程仓库下载
-U 强制更新 SNAPSHOT 依赖
-q 静默模式,只输出错误
-X Debug 模式,输出详细日志
-e 输出异常堆栈
-N 不递归构建子模块
-P profile-id 激活指定 profile
-Dproperty=value 传入系统属性