02-生命周期

Catalogue
  1. 1. 三套生命周期
  2. 2. clean生命周期
  3. 3. default生命周期
  4. 4. site生命周期
  5. 5. 命令行与生命周期
  6. 6. 参考资料

Maven的生命周期就是为了对项目的所有构建过程进行抽象和统一,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等步骤。也就是说所有项目的构建步骤,都能映射到一个生命周期上。

Maven的生命周期是抽象的,意味着生命周期不做任何实际的工作,在maven的设计中,实际的任务都交由插件完成。Maven为大多数构建步骤编写并绑定了默认插件。如,针对编译的有maven-compiler-plugin,针对测试的maven-surefire-plugin等。有特殊需要时,用户可以配置插件定制构建行为,甚至自己编写插件。

Maven定义的生命周期和插件机制一方面保证了所有Maven项目有一至的构建标准,另外又通过默认插件简化和稳定了实际项目的构建。此外,该机制还提供了足够的扩展空间,用户可以通过配置现有插件或者自行编写插件来自定义构建行为。

三套生命周期

Maven有三套相互独立的生命周期,分别是clean、default、site,其作用如下:

  • clean:清理项目
  • default:构建项目
  • site:建立项目站点

每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。

clean生命周期

它包含三个阶段:

  1. pre-clean: 执行一些清理前需要完成的工作
  2. clean:清理上一次构建生成的文件
  3. post-clean: 执行一些清理后需要完成的工作

default生命周期

default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期是最核心的部分,其包含的阶段如下,只对重要阶段进行解释:

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
  5. generate-resources
  6. process-resources
  7. compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中。
  8. process-classes
  9. generate-test-souces
  10. process-test-source: 处理项目测试资源文件。一般来说,是对src/test/resource目录的内容进行变量替换工作后,复制到项目输出的测试classpath目录中。
  11. generate-test-resources
  12. process-test-resources
  13. test-compile: 编译项目的测试代码。一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中。
  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. instll: 将包安装到Maven本地仓库,供本地其他Maven项目使用
  23. deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。

site生命周期

Maven能够基于Pom所包含信息,自动的生成一个友好的站点,方便团队交流和发布项目信息。包含如下阶段:

  1. pre-site: 执行一些在生成项目站点之前需要完成的工作。
  2. site: 生成项目站点文档
  3. post-site: 执行一些在生成项目站点之后需要完成的工作。
  4. site-deploy: 将生成的项目站点发布到服务器上。

命令行与生命周期

从命令行执行Maven任务的最主要方式就是调用Maven的生命周期阶段。在每个生命周期中,调用其某个阶段时,会顺序执行该生命周期中起始阶段到该阶段的所有阶段,不会影响其他生命周期的阶段执行。如下举例说明:

  • mvn clean: 实际会执行clean生命周期的pre-clean和clean阶段。
  • mvn test: 实际执行default生命周期中从validate直到test的所有阶段。
  • mvn clean install: 实际调用clean生命周期的pre-clean和clean阶段,以及default生命周期的从validate到install的所有阶段。

参考资料