一、什么是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
时,clean
和post-clean
都不会被执行。而当我们执行clean
时,则pre-clean
和clean
都会执行,并且会按照顺序执行。而当我们执行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 |