抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文了解了Maven三大独立生命周期的阶段组成与核心作用,学习了如何对生命周期进行定制。

环境

Windows 10 企业版 LTSC 21H2
Java 1.8
Maven 3.6.0

1 定义

Maven生命周期是一套标准化的项目构建流程约定,它定义了项目发版的全流程步骤,并规定了这些步骤的执行顺序。其核心价值在于:

  • 自动化:按约定顺序自动执行构建步骤,无需手动分步操作。
  • 标准化:所有Maven项目遵循同一套目录结构和构建流程。
  • 基石:Maven的插件需绑定到生命周期的特定阶段才能生效,生命周期是插件运行的基石。

2 生命周期

Maven将构建流程拆分为三个完全独立的生命周期:Clean(清理)、Default(核心构建)、Site(文档生成)。三者互不干扰,可单独执行(如仅清理不构建,或仅生成文档不清理),也可组合执行(如先清理再构建)。

2.1 Clean

2.1.1 说明

Clean生命周期的核心作用是删除上一次构建生成的临时文件(如target目录),为新构建提供干净环境,避免旧文件残留导致构建异常。

2.1.2 组成

阶段组成:

阶段名称 核心作用
pre-clean 执行清理前的准备工作:备份旧target构建输出目录、删除自定义临时文件
clean 核心清理步骤:删除默认target构建输出目录
post-clean 执行清理后的收尾工作:删除备份文件、通知其他系统清理完成

2.1.3 注意

执行mvn clean命令仅触发pre-clean阶段和clean阶段,不会触发post-clean阶段,需显式配置插件才会执行。

触发clean阶段仅删除默认target目录,若有自定义输出目录,需通过maven-clean-plugin配置额外清理路径。

Clean生命周期与其他生命周期完全独立,需显式执行mvn clean命令才会触发Clean生命周期。

2.2 Default

2.2.1 说明

Default生命周期是Maven最核心的生命周期,覆盖全流程,几乎所有日常构建操作都基于此生命周期。

核心特性:

  • 阶段顺序固定:所有阶段按前置依赖顺序执行,执行某个阶段时,会自动触发其所有前置阶段。
  • 阶段数量多:包含23个阶段,日常开发仅关注核心阶段。
  • 插件绑定:每个阶段的功能由对应的Maven插件实现。

2.2.2 组成

阶段组成:

阶段名称 核心作用 依赖插件 结果验证
validate 验证项目合法性:检查项目结构是否完整、依赖是否缺失、配置是否正确 核心模块直接处理 检查不通过直接报错
initialize 初始化构建环境:创建临时目录、加载构建参数、生成构建所需的元数据文件 核心模块直接处理 在target目录下出现maven-status等临时目录
process-resources 处理主程序资源文件:将src/main/resources目录下的配置文件复制到target/classes目录下,并替换资源中的占位符属性 依赖maven-resources-plugin插件 在target/classes目录下出现资源文件
compile 编译主程序源码:将src/main/java目录下的Java文件编译为字节码文件,输出到target/classes目录下 依赖maven-compiler-plugin插件 在target/classes目录下出现编译后的主程序字节码文件
process-test-resources 处理测试资源文件:将src/test/resources目录下的测试配置文件复制到target/test-classes目录下 依赖maven-resources-plugin插件 在target/test-classes目录下出现测试资源文件
test-compile 编译测试程序源码:将src/test/java目录下的Java文件编译为字节码文件,输出到target/test-classes目录下 依赖maven-compiler-plugin插件 在target/test-classes目录下出现编译后的测试字节码文件
test 执行单元测试:运行target/test-classes目录下的测试类,执行@Test注解的测试方法,生成测试报告 依赖maven-surefire-plugin插件 控制台输出测试结果,在target目录下生成surefire-reports测试报告
package 打包构建产物:将target/classes目录下的主程序字节码文件、资源文件打包为压缩文件,生成Jar包或War包 Java项目依赖maven-jar-plugin插件,Web项目依赖maven-war-plugin插件 在target目录下出现Jar包或War包
install 安装产物到本地仓库:将打包产物及pom.xml文件复制到本地仓库,供本地其他项目依赖 依赖maven-install-plugin插件 在本地仓库对应GAV目录下找到打包产物
deploy 部署产物到远程仓库:将打包产物复制到远程私服,供团队共享 依赖maven-deploy-plugin插件 在远程私服对应目录下找到打包产物

2.2.3 注意

命令与阶段对应关系:

常用命令 触发阶段 核心用途
mvn compile validate initialize process-resources compile 仅编译主程序源码
mvn test 上述阶段 + process-test-resources test-compile test 编译并执行单元测试
mvn package 上述阶段 + package 执行编译和测试,生成打包文件
mvn install 上述阶段 + install 打包并安装到本地仓库
mvn deploy 上述阶段 + deploy 打包并安装到本地仓库,然后部署到远程私服

2.3 Site

2.3.1 说明

Site生命周期的核心作用是自动生成项目的标准化文档站点,包含项目说明、依赖报告、测试报告、团队信息等,方便团队协作与项目维护。

2.3.2 组成

阶段组成:

阶段名称 核心作用 依赖插件 结果验证
pre-site 生成站点前的准备工作:检查文档资源是否完整、初始化站点目录 核心模块直接处理 在target目录下生成site临时目录
site 核心阶段:生成HTML格式的项目站点文档 依赖maven-site-plugin插件 在target/site目录下生成HTML文档
post-site 生成站点后的收尾工作:检查站点文档完整性、准备部署资源 核心模块直接处理 生成站点部署所需的元数据文件
site-deploy 部署站点文档到远程服务器 依赖maven-site-plugin插件 远程服务器上的target目录下生成site临时目录,包含HTML文档

2.3.3 注意

命令与阶段对应关系:

常用命令 触发阶段 核心用途
mvn site pre-site site post-site 生成站点文档
mvn site-deploy 上述阶段 + site-deploy 生成并部署站点

执行mvn site-deploy命令需先在pom.xml文件中配置远程站点仓库:

pom.xml
1
2
3
4
5
6
<distributionManagement>
<site>
<id>github-pages</id>
<url>scm:git:https://github.com/your-name/your-repo.git</url>
</site>
</distributionManagement>

3 行为定制

3.1 跳过测试

如果需要临时跳过测试环节,有两种方式配置:

  • 执行mvn test -DskipTests命令会跳过测试执行,但不会跳过测试编译,仍会编译测试源码。适用于快速打包的场景。
  • 执行mvn test -Dmaven.test.skip=true命令会跳过测试编译和测试执行。适用于测试代码尚未开发完成的场景。

如果需要永久跳过测试环节,需要修改pom.xml文件:

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>

3.2 指定阶段

若仅需执行某个阶段,直接调用该阶段的命令即可。

示例:

  • 执行mvn process-resources命令仅处理主程序资源文件,不编译文件。
  • 执行mvn test-compile命令仅编译测试代码,不执行测试。

3.3 绑定插件

Maven生命周期的阶段本身不实现具体功能,而是绑定到对应的插件目标来完成工作。

绑定方式:

  • 默认绑定:Maven为核心阶段预设了插件。
  • 自定义绑定:可以为某个阶段绑定指定插件。

示例:为package阶段绑定Javadoc插件:

pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.5.0</version>
<executions>
<!-- 绑定到package阶段,执行package时自动生成Javadoc -->
<execution>
<phase>package</phase>
<goals>
<goal>javadoc</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding> <!-- 解决中文注释乱码 -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

评论