Maven 与项目构建的生命周期

在 Maven 出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理、编译、测试和部署。虽然大家都在不停的做构建工作,但构建方式各不相同,有的人手动进行项目构建,有的人编写自动化脚本执行构建或构建中的某一部分工作。这种因人而异,因项目而异的构建方式鱼龙混杂,并且绝大部分的自动化脚本都需要进行大量的修改甚至重写才能顺利地迁移到另一个项目使用。

Maven 生命周期的设计哲学之一就是对所有的构建过程进行抽象和统一。Maven 从大量项目的构建工具中学习并总结出了一套高度完善的、易于扩展的生命周期,其中包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。

Maven 的三套生命周期

Maven 拥有三套互相独立的生命周期,clean、default 和 site。clean 生命周期的目的是清理项目,default 生命周期的目的是构建项目,site 生命周期的目的是建立项目站点。

clean 生命周期

clean 生命周期的目的是清理项目,它包含三个阶段(按照先后顺序):

  1. pre-clean 执行清理工作的准备工作
  2. clean 执行清理工作
  3. post-clean 执行清理工作的后续工作
default 生命周期

default 生命周期定义了构建项目是所需要执行的所有步骤,它包含如下阶段(按照先后顺序):

  1. validate 验证
  2. initialize 初始化
  3. generate-sources 生成主源代码
  4. process-sources 处理主源代码,将源代码中的变量进行替换
  5. generate-resources 生成主资源文件
  6. process-resources 处理主资源文件,将源代码中的资源文件复制到对应的 /target 目录下
  7. compile 编译项目的主源码
  8. process-classes 处理 class 文件
  9. generate-test-sources 生成测试源代码
  10. process-test-sources 处理测试源代码
  11. generate-test-resources 生成测试资源文件
  12. process-test-resources 处理测试资源文件
  13. test-compile 编译项目的测试代码
  14. process-test-classes 处理测试的 class 文件
  15. test 运行测试代码
  16. prepare-package 执行打包前的准备工作
  17. package 打包,根据定义的打包类型将项目打包并放置到 /target 目录下
  18. pre-integration-test 执行集成测试前的准备工作
  19. integration-test 执行集成测试
  20. post-integration-test 执行集成测试后的处理工作
  21. verify 校验项目构建结果
  22. install 安装,将打好的包安装到本地仓库中
  23. deploy 部署,将打好的包部署到远程仓库中
site 生命周期

site 生命周期的目的是建立和发布项目站点,它包含四个阶段(按照先后顺序):

  1. pre-site 执行生成项目站点的准备工作
  2. site 生成项目站点文件
  3. post-site 执行生成项目站点的后续工作
  4. site-deploy 将生成的项目站点发布到服务器上

Maven 生命周期的调用

Maven 的各个生命周期是相互独立的,同一个生命周期内的不同阶段是有前后依赖关系的。如:

  • mvn clean 命令调用 clean 生命周期的 clean 阶段,在实际执行中 clean 生命周期中的 pre-cleanclean 阶段都会执行
  • mvn package 命令调用 default 生命周期的 package 阶段,在实际执行中 default 生命周期中的 validateinitialize ... 直到 package 阶段都会执行
  • mvn clean install 命令调用 clean 生命周期的 clean 阶段和 default 生命周期的 install 阶段,在实际执行中,clean 生命周期的 pre-cleanclean 阶段和 default 生命周期的 validateinstall 阶段都会执行
  • mvn clean deploy site-deploy 命令调用 clean 生命周期的 clean 阶段和 default 生命周期的 deploy 阶段,以及 site 生命周期的 site-deploy 阶段,在实际执行中,clean 生命周期的 pre-cleanclean 阶段,default 生命周期和 site 生命周期的所有阶段都会执行

参考文献

《Maven 实战》 许晓斌 机械工业出版社 2010.11

《Maven 项目生命周期与构建原理》 亦山 CSDN