Maven 构建生命周期是一组有序的阶段(phases),定义了项目构建和分发的过程。每个生命周期由多个阶段组成,每个阶段代表构建过程中的一个特定步骤。
这是最重要的生命周期,包含了项目构建的主要阶段:
验证项目结构和必要信息
编译源代码
运行单元测试
打包编译后的代码
验证包的有效性
安装到本地仓库
部署到远程仓库
| 阶段 | 描述 | 常用命令 |
|---|---|---|
| validate | 验证项目是否正确,所有必要信息是否可用 | mvn validate |
| initialize | 初始化构建状态 | - |
| generate-sources | 生成源代码 | - |
| process-sources | 处理源代码 | - |
| generate-resources | 生成资源文件 | - |
| process-resources | 处理资源文件到目标目录 | - |
| compile | 编译项目源代码 | mvn compile |
| process-classes | 处理编译生成的文件 | - |
| generate-test-sources | 生成测试源代码 | - |
| process-test-sources | 处理测试源代码 | - |
| generate-test-resources | 生成测试资源 | - |
| process-test-resources | 处理测试资源到目标目录 | - |
| test-compile | 编译测试源代码 | mvn test-compile |
| process-test-classes | 处理测试编译生成的文件 | - |
| test | 运行单元测试 | mvn test |
| prepare-package | 准备打包 | - |
| package | 打包编译后的代码 | mvn package |
| pre-integration-test | 集成测试前准备 | - |
| integration-test | 运行集成测试 | mvn integration-test |
| post-integration-test | 集成测试后处理 | - |
| verify | 验证包是否有效且符合质量标准 | mvn verify |
| install | 安装包到本地仓库 | mvn install |
| deploy | 部署到远程仓库 | mvn deploy |
用于清理项目构建产生的文件:
| 阶段 | 描述 | 命令 |
|---|---|---|
| pre-clean | 清理前的准备工作 | - |
| clean | 清理构建生成的文件 | mvn clean |
| post-clean | 清理后的收尾工作 | - |
用于生成项目文档和站点:
| 阶段 | 描述 | 命令 |
|---|---|---|
| pre-site | 生成站点前的准备工作 | - |
| site | 生成项目站点文档 | mvn site |
| post-site | 生成站点后的收尾工作 | - |
| site-deploy | 部署站点到服务器 | mvn site-deploy |
mvn package 会依次执行 validate、compile、test、package 阶段。
每个生命周期阶段都会绑定一个或多个插件目标:
# 执行特定插件的特定目标 mvn plugin:goal # 示例:编译源代码 mvn compiler:compile # 示例:运行测试 mvn surefire:test # 示例:创建 JAR 文件 mvn jar:jar
| 阶段 | 插件:目标 | 描述 |
|---|---|---|
| process-resources | resources:resources | 复制资源文件 |
| compile | compiler:compile | 编译源代码 |
| process-test-resources | resources:testResources | 复制测试资源文件 |
| test-compile | compiler:testCompile | 编译测试代码 |
| test | surefire:test | 运行单元测试 |
| package | jar:jar | 创建 JAR 包 |
| install | install:install | 安装到本地仓库 |
| deploy | deploy:deploy | 部署到远程仓库 |
可以在 POM 中自定义插件绑定到特定阶段:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="开始构建项目..." />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>