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>