Maven实战-第十三篇(Maven的生命周期)

Maven实战-第十三篇(Maven的生命周期)

一、什么是Maven的生命周期

我们在实际的开发中有很多重复性的操作,例如代码的编译、打包、部署等等。Maven为了解决这样重复性的问题,对项目的构建过程进行了抽象和统一。这其实就是Maven的生命周期,目的是容易让开发人员在使用Maven的时候,方便我们扩展。并且Maven中的生命周期基本包括了我们之前介绍过的所有项目的构建命令,例如:编译、测试、打包、测试、部署等。


在Maven中生命周期定义了构建的各个步骤,并定义了这些步骤的顺序。但并没有提供具体这些构建的实现,构建的实现是由插件实现的。所以Maven中每个构建步骤都可以绑定一个或者多个插件,并且Maven为大部分步骤都绑定了默认的插件。这也就是为什么使用Maven构建项目非常的简单的,因为大部分插件都是默认支持的,我们不需要额外的处理。除非我们想要引入其它的插件。或者我们想要开发自己的插件,来满足我们日常开发的需求。Maven定义生命周期的目的就是保证Maven构建的标准,这是其一,其二就是通过默认绑定插件的方式实现了构建的目的,并且Maven也提供了相应的扩展,允许我们通过配置或者自己开发插件的方式来自定义构建的行为。


在Maven中生命周期实际是有三种,它们分别是:clean、default、site。并且它们是互相独立的。也就是当我们执行clean命令时,Maven不会对其它生命周期产生任何影响,只会影响clean生命周期。下面我们重点介绍一下,上面说的三个生命周期。

二、clean生命周期

我们知道clean命令的作用是清理项目的。在Maven中clean生命周期实际上又分为三个不同的阶段,它门分别是:

阶段 描述
pre-clean 在实际项目清理之前执行所需的流程。
clean 删除上一个版本生成的所有文件。
post-clean 执行完成项目清理所需的流程。

并且我们介绍过,Maven中生命周期指定了相应的顺序,所以当我们执行pre-clean时,cleanpost-clean都不会被执行。而当我们执行clean时,则pre-cleanclean都会执行,并且会按照顺序执行。而当我们执行post-clean时,则上面三个阶段都会执行。

三、default生命周期

default生命周期是Maven中最重要的生命周期,因为它真正执行了构建所需要的所有步骤。具体的步骤如下:

阶段 描述
validate 验证项目是否正确,并且所有必要的信息都可用。
initialize 初始化构建状态,例如设置属性或创建目录。
generate-sources 生成任何源代码以包含在编译中。
process-sources 处理源代码,例如过滤任何值。
generate-resources 生成资源以纳入一揽子计划。
process-resources 将资源复制并处理到目标目录中,准备打包。
compile 编译项目的源代码。
process-classes 后处理编译中生成的文件,例如在Java类上进行字节码增强。
generate-test-sources 生成任何测试源代码以包含在编译中。
process-test-sources 处理测试源代码,例如过滤任何值。
generate-test-resources 为测试创建资源。
process-test-resources 将资源复制并处理到测试目标目录中。
test-compile 将测试源代码编译到测试目标目录中
process-test-classes 后处理测试编译中生成的文件,例如在Java类上进行字节码增强。
test 使用合适的单元测试框架运行测试。这些测试不应要求打包或部署代码。
prepare-package 在实际包装之前执行任何准备包装所需的操作。这通常会导致包装的、处理的包裹版本。
package 获取编译后的代码,并将其打包为可分发格式,例如JAR。
pre-integration-test 在执行集成测试之前执行所需的操作。这可能涉及设置所需的环境等事情。
integration-test 如有必要,处理并将软件包部署到可以运行集成测试的环境中。
post-integration-test 执行集成测试后执行所需的操作。这可能包括清理环境。
verify 运行任何检查以验证软件包是否有效并符合质量标准。
install 将软件包安装到本地存储库中,作为本地其他项目的依赖项使用。
deploy 在集成或发布环境中完成,将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。

四、site生命周期

site生命周期的目的是建立和发布项目站点,Maven可以自动生成一个站点,方便团队交流和发布项目信息。该生命周期也有以下几个阶段:

阶段 描述
pre-site 在实际项目现场生成之前执行所需的流程。
site 生成项目的站点文档。
post-site 执行完成站点生成所需的流程,并为站点部署做准备。
site-deploy 将生成的网站文档部署到指定的Web服务器。

五、生命周期与插件的绑定关系

我们知道上述生命周期的实现,都是由插件来完成的,下面我们介绍一下,上面生命周期与插件之前的关系,并且这些关系是Maven中默认绑定的。

阶段 插件
clean clean:clean
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar 和 plugin:addPluginArtifactMetadata
install install:install
deploy deploy:deploy
generate-resources plugin:descriptor
package ear:ear
install install:install
site site:site
site-deploy site:deploy

给TA打赏
共{{data.count}}人
人已打赏
Maven

Maven实战-第十二篇(Maven中的版本)

2023-7-30 19:26:32

Maven

Maven实战-第十四篇(Maven中的插件)

2023-8-5 6:43:54