今后还会不断地栽跟头,但同时你也有了每次站起来的坚强。
——《哆啦A梦》
Maven 生命周期
Maven 构建生命周期包含三个基本的生命周期:
- clean:清理项目
- default(build):核心构建流程
- site:生成项目文档

每个生命周期由多个阶段组成,执行时按照顺序执行。但是三大生命周期之间的关系是独立的,例如执行site不会执行build和clean。
clean 生命周期
clean 生命周期负责清理项目的临时文件和目录(主要是target/),包含以下三个阶段:
| 阶段 | 说明 | 自动绑定的插件目标 |
|---|---|---|
pre-clean | 清理前的准备工作 | 无默认绑定 |
clean | 删除 target/目录 | maven-clean-plugin:clean |
post-clean | 清理后的收尾工作 | 无默认绑定 |
在Maven中,当你执行生命周期中的任意一个阶段时,都会顺序执行该阶段前面的所有阶段。
例如:当我们执行命令 maven clean时
会先执行 per-clean 然后执行 clean ,而不会执行 post-clean
default 生命周期
default 生命周期是Maven最主要的生命周期,包含项目构建和部署的所有核心步骤。它由全部23个阶段(phase)组成,按顺序执行,每个阶段负责构建过程不同的方面:
- validate : 验证项目是正确的,所有必要信息都可用
- initialize : 初始化构建状态,例如设置属性或创建目录
- generate-sources : 生成包含在编译阶段中的源代码
- process-sources : 处理源代码,例如过滤某些值
- generate-resources : 生成资源文件
- process-resources : 将资源复制并处理到目标目录中
- compile : 编译项目的源代码
- process-classes : 处理编译生成的文件
- generate-test-sources : 生成测试源代码
- process-test-sources : 处理测试源代码
- generate-test-resources : 生成测试资源
- process-test-resources : 复制并处理资源到测试目标目录
- test-compile : 编译测试源代码
- process-test-classes : 处理测试编译生成的文件
- test : 使用合适的单元测试框架运行测试
- prepare-package : 执行打包前所需的任何操作
- package : 将编译后的代码打包成可分发格式,如JAR
- pre-integration-test : 集成测试前的准备工作
- integration-test : 处理和部署必要的包到集成测试环境
- post-integration-test : 集成测试后的动作
- verify : 检查包是否符合质量标准
- install : 将包安装到本地仓库,供其他项目使用
- deploy : 将最终包复制到远程仓库,与其他开发者和项目共享
常用阶段及其绑定的插件目标
在 default 生命周期中,一些关键阶段默认绑定了特定的插件目标:
| 生命周期阶段 | 绑定的插件:目标 | 执行的操作 |
|---|---|---|
| compile | maven-compiler-plugin:compile | 编译项目源代码 |
| test-compile | maven-compiler-plugin:testCompile | 编译测试代码 |
| test | maven-surefire-plugin:test | 运行单元测试 |
| package | maven-jar-plugin:jar (对于JAR项目) | 创建项目JAR包 |
| install | maven-install-plugin:install | 将项目构件安装到本地仓库 |
| deploy | maven-deploy-plugin:deploy | 将项目构件部署到远程仓库 |
Site生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
组合执行生命周期
如果需要执行多个生命周期,可以在命令行中组合多个阶段:
mvn clean install site
实际应用场景
通常的最佳实践是将生命周期组合使用:
mvn clean install site
这样可以确保:
- 首先清理旧的构建输出 (clean)
- 然后完成编译、测试和安装 (install)
- 最后基于最新代码生成文档站点 (site)