Maven生命周期详解

Maven生命周期详解

一、生命周期的概念与意义

  在项目构建时包含了清理、编译、测试、打包、验证、部署,文档生成等步骤,maven统一对其进行了一个抽象,抽象成了三个生命周期,以及对应的多个阶段。这么做的意义在是:
    1、每个阶段都可以成为一个扩展点,可以采用不同的方式来实现,提高了扩展性与灵活性;
    2、规范并且统一了maven的执行路径。
  下图就是Maven默认的生命周期。
Maven默认生命周期
  Maven默认的生命周期包括预编译、编译、编译测试类、构建、部署这些阶段。这里的每一个阶段都只是提供了一个扩展点,只是抽象出来,里面是没有一个具体的实现的。具体的实现是由插件来提供的,插件就可以提供多种多样的实现。比如说构建阶段我们有一个项目是Jar包,那肯定是用Jar包的实现方式构建,如果那个项目是War包,那肯定是用War包的方式去构建。这就是Maven生命周期的每一个阶段所存在的意义。就好像我们在做Java开发的时候我们抽象出一些接口出来,我们这些接口并没有一些具体的实现一样,接口是可以拥有多种实现方式的,然后在不同的场景中把不同的实现拿进来然后构成实现。这就是Maven生命周期的一个意义了。

二、maven三大生命周期与其对应的phase(阶段)

  Maven一共包含三大生命周期,如下:
    1、clean:清理生命周期,用于清理项目;
    2、default:默认生命周期,用于编译、打包、测试、部署等;
    3、site:站点文档生成,用于构建站点文档。
  这里面最核心的就是default生命周期。这个default生命周期就完整的默认实现了项目打包的大部分过程。

生命周期(lifecycle)阶段(phase)描述(describe)
clean Lifecyclepre-clean预清理
clean清理
post-clean清理之后
default Lifecyclevalidate验证
initialize初始化
generate-sources
process-sources
generate-sources
process-sources
compile编译
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile编译测试类
process-test-classes
test执行测试
prepare-package构建前准备
package打包构建
pre-integration-test
integration-test
post-integration-test
verify验证
install上传到本地仓库
deploy上传到远程仓库
site Lifecyclepre-site准备构建站点
site构建站点
post-site构建站点之后
site-deploy站点部署
  三大生命周期相互独立运行,也可以合在一起运行。但在每个生命周期里面的每一个阶段是具有严格的执行顺序的,比如是先执行完compile才能执行package动作,此外阶段还有包含逻辑存在,即当你执行一个阶段时,前面的阶段会自动执行。

三、生命周期与插件的关系

  生命周期的phase(阶段)组成了项目的完整过程,但这些过程具体由谁来实现呢?这就是插件,maven的核心代码量其实很少。因为它的大部分实现都是由插件来完成的。比如:test阶段就是由maven-surefire-plugin实现。在pom.xml中我们可以设置指定插件goal(目标)与phase(阶段)绑定,当项目构建到达指定phase(阶段)时,就会触发这些插件goal(目标)的执行。一个插件有时候会实现多个phase(阶段)。例如maven-compiler-plugin插件分别实现了compile和testCompile。
  总结:
    1、生命周期的阶段可以绑定具体的插件及目标
    2、不同配置下同一个阶段可以对应多个插件和目标
    3、phase==>plugin==>goal(目标)

四、生命周期与插件的默认绑定

  如果在我们的项目当中并没有配置maven-compiler-plugin 插件,但当我们执行compile 阶段时一样能够执行编译操作,原因是maven 默认为指定阶段绑定了插件实现。其实这些默认绑定是在apache-maven-3.2.1\lib\maven-core-3.2.1.jar内定义的,解压这个jar的maven-core-3.2.1\META-INF\plexus路径下有一个default-bindings.xml文件,这个写了maven绑定的默认插件。例如:下图的default生命周期默认绑定的插件。(不同的项目类型 其默认绑定是不同的,这里只指列举了default为jar的默认绑定
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值