Maven生命周期:构建流程深度解析
Maven 生命周期详解
Maven 的生命周期是构建过程的核心抽象,它定义了项目构建、测试和部署的有序阶段序列。理解生命周期对于高效使用 Maven 至关重要。
一、三大内置生命周期
Maven 包含三个独立的生命周期,每个生命周期包含多个阶段(phase):
生命周期 | 作用 | 关键阶段 |
---|---|---|
clean | 清理构建产物 | pre-clean , clean , post-clean |
default | 项目编译、测试、打包、部署 | compile , test , package , install |
site | 生成项目文档和报告 | pre-site , site , post-site , site-deploy |
二、生命周期阶段详解
1. clean 生命周期
pre-clean
:清理前的准备工作clean
:删除target
目录(核心清理阶段)post-clean
:清理后的收尾工作
2. default 生命周期(核心)
阶段 | 作用 | 触发命令 |
---|---|---|
validate | 验证项目正确性(POM 完整性、依赖可用性) | mvn validate |
compile | 编译主源代码(输出到 target/classes ) | mvn compile |
test-compile | 编译测试代码(输出到 target/test-classes ) | - |
test | 运行单元测试(JUnit/TestNG) | mvn test |
package | 打包编译后的代码(JAR/WAR/EAR) | mvn package |
verify | 运行集成测试和检查(如 Sonar 质量检测) | mvn verify |
install | 将包安装到本地仓库(供其他项目引用) | mvn install |
deploy | 将包部署到远程仓库(Nexus/Artifactory) | mvn deploy |
3. site 生命周期
site
:生成项目文档(API 文档、测试报告等)site-deploy
:部署生成的站点到服务器
三、关键特性
1. 阶段顺序执行
# 执行 test 阶段会自动触发其前的所有阶段
mvn test = validate + compile + test-compile + test
2. 插件绑定机制
每个阶段绑定具体的插件目标(goal):
阶段 | 绑定的插件目标 |
---|---|
compile | maven-compiler-plugin:compile |
test | maven-surefire-plugin:test |
package | maven-jar-plugin:jar (或 war/ear 插件) |
install | maven-install-plugin:install |
3. 多模块构建
在父 POM 执行命令会按依赖顺序构建所有子模块:
mvn clean install
# 构建顺序:common → service → webapp
四、常用命令组合
命令 | 等效阶段序列 | 用途 |
---|---|---|
mvn clean | pre-clean → clean | 清理构建产物 |
mvn test | validate → … → test | 运行单元测试 |
mvn package | validate → … → package | 打包项目 |
mvn install | validate → … → install | 安装到本地仓库 |
mvn clean deploy | clean 生命周期 + default 到 deploy | 清理后部署到远程仓库 |
mvn site | pre-site → site | 生成项目文档 |
mvn compile -DskipTests | 只执行编译,跳过测试 | 快速编译验证代码 |
五、自定义生命周期绑定
可通过配置添加插件目标到生命周期阶段:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.6.0</version><executions><execution><phase>package</phase> <!-- 绑定到 package 阶段 --><goals><goal>jar</goal> <!-- 执行 javadoc:jar 目标 --></goals></execution></executions></plugin></plugins>
</build>
六、生命周期最佳实践
-
理解阶段依赖
执行mvn install
时会自动运行所有前置阶段 -
利用跳过选项
mvn install -DskipTests # 跳过测试 mvn deploy -Dmaven.test.skip # 跳过编译测试和运行测试
-
多模块优化构建
mvn -pl service clean install # 仅构建 service 模块 mvn -am -pl webapp install # 构建 webapp 及其依赖模块
-
生命周期调试
mvn help:describe -Dcmd=compile # 查看 compile 阶段绑定的插件
核心要点:Maven 生命周期提供了标准化的构建流程。通过
mvn [phase]
命令触发从初始阶段到指定阶段的所有操作,插件目标绑定到各阶段实现具体功能。掌握生命周期可显著提升构建效率。
学习资源
- 官方生命周期文档
- 生命周期图示