Maven-构建生命周期

1932 字
5 分钟

今后还会不断地栽跟头,但同时你也有了每次站起来的坚强。

——《哆啦A梦》

Maven 生命周期

Maven 构建生命周期包含三个基本的生命周期:

  • clean:清理项目
  • default(build):核心构建流程
  • site:生成项目文档

1746456428007

每个生命周期由多个阶段组成,执行时按照顺序执行。但是三大生命周期之间的关系是独立的,例如执行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)组成,按顺序执行,每个阶段负责构建过程不同的方面:

  1. validate : 验证项目是正确的,所有必要信息都可用
  2. initialize : 初始化构建状态,例如设置属性或创建目录
  3. generate-sources : 生成包含在编译阶段中的源代码
  4. process-sources : 处理源代码,例如过滤某些值
  5. generate-resources : 生成资源文件
  6. process-resources : 将资源复制并处理到目标目录中
  7. compile : 编译项目的源代码
  8. process-classes : 处理编译生成的文件
  9. generate-test-sources : 生成测试源代码
  10. process-test-sources : 处理测试源代码
  11. generate-test-resources : 生成测试资源
  12. process-test-resources : 复制并处理资源到测试目标目录
  13. test-compile : 编译测试源代码
  14. process-test-classes : 处理测试编译生成的文件
  15. test : 使用合适的单元测试框架运行测试
  16. prepare-package : 执行打包前所需的任何操作
  17. package : 将编译后的代码打包成可分发格式,如JAR
  18. pre-integration-test : 集成测试前的准备工作
  19. integration-test : 处理和部署必要的包到集成测试环境
  20. post-integration-test : 集成测试后的动作
  21. verify : 检查包是否符合质量标准
  22. install : 将包安装到本地仓库,供其他项目使用
  23. deploy : 将最终包复制到远程仓库,与其他开发者和项目共享

常用阶段及其绑定的插件目标

在 default 生命周期中,一些关键阶段默认绑定了特定的插件目标:

生命周期阶段绑定的插件:目标执行的操作
compilemaven-compiler-plugin:compile编译项目源代码
test-compilemaven-compiler-plugin:testCompile编译测试代码
testmaven-surefire-plugin:test运行单元测试
packagemaven-jar-plugin:jar (对于JAR项目)创建项目JAR包
installmaven-install-plugin:install将项目构件安装到本地仓库
deploymaven-deploy-plugin:deploy将项目构件部署到远程仓库

Site生命周期

Maven Site 插件一般用来创建新的报告文档、部署站点等。

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

组合执行生命周期

如果需要执行多个生命周期,可以在命令行中组合多个阶段:

mvn clean install site

实际应用场景

通常的最佳实践是将生命周期组合使用:

mvn clean install site

这样可以确保:

  1. 首先清理旧的构建输出 (clean)
  2. 然后完成编译、测试和安装 (install)
  3. 最后基于最新代码生成文档站点 (site)