MAVEN-生命周期

生命周期

在maven出现之前,项目构建的生命周期就已经存在,对项目的清理,编译,测试及部署。Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven的生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。几乎所有项目的构建,都能映射到这样一个生命周期上。

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作。在Maven的设计中,实际的任务都交由插件来完成。这种思想与设计模式中的模板方法非常相似。模板方法在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样既保证了算法有足够的可扩展性,又能严格控制算法的整体结构。

每个构建步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建步骤编写并绑定了默认的插件。例如,针对编译的插件有maven-compiler-plugin,针对测试的插件有maven-surefire-plugin等。当用户有特殊需要的时候,也可以配置插件定制构建行为,甚至自己编写插件。

Maven拥有三套生命周期,它们分别为clean, default 和 site。 clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site生命周期的目的是建立项目站点。

每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。以clean生命周期为例,它包含的阶段有pre-clean, clean 和 post-clean。当用户调用pre-clean的时候,只有pre-clean阶段得以执行;当用户调用clean的时候,pre-clean 和 clean 阶段会得以顺序执行;当用户调用post-clean的时候,pre-clean ,clean 和 post-clean。  

较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的, 用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。例如,当用户调用clean生命周期的clean阶段的时候,不会触发default生命周期的任何阶段,反之亦然, 当用户调用default生命周期的compile阶段的时候,也不会触发clean生命周期的任何阶段。

clean生命周期

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-sources

10) process-test-sources 处理项目测试资源文件。一般来说,是对 src/test/resources 目录的内容进行变量替换等工作后,复制到项目输出的测试的classpath目录中。

11) generate-test-resources

12) process-test-resources

13) test-compile 编译项目的测试代码。一般来说,是编译 src/test/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) install 将包安装到Maven本地仓库,供本地其他Maven项目使用。

23) deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。

site生命周期

site生命周期的目的是建立和发布项目站点, Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:

1)pre-site 执行一些在生成项目站点之前需要完成的工作。

2) site 生成项目站点文档。

3) post-site 执行一些在生成项目站点之后需要完成的工作。

4) site-deploy 将生成的项目站点发布到服务器上。

 

命令行与生命周期

从命令行执行Maven任务的最主要方式就是调用Maven的声明周期阶段。需要注意的是,各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。下面以一些常见的Maven命令为例,解释其执行的生命周期阶段:

1) mvn clean : 该命令调用clean生命周期的clean阶段。 实际执行的阶段为clean生命周期的pre-clean 和 clean 阶段。

2) mvn test : 该命令调用default生命周期的test阶段。实际执行的阶段为default生命周期的validate, initialize等,直到test的所有阶段。这也解释了为什么在执行测试的时候,项目的代码能够自动得以编译。

3) mvn clean install : 该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean, clean阶段,以及default生命周期的从validate至install的所有阶段。该命令结合了两个生命周期,在执行真正的项目构建之前清理项目是一个很好的实践。

4) mvn clean deploy site-deploy : 该命令调用clean生命周期的clean阶段,default生命周期的deploy阶段,以及site生命周期的site-deploy阶段。实际执行的阶段为clean生命周期的pre-clean, clean阶段, default生命周期的所有阶段,以及site生命周期的所有阶段。该命令结合了Maven所有三个生命周期,且deploy为default生命周期的最后一个阶段,site-deploy为site生命周期的最后一个阶段。

由于Maven中主要的生命周期阶段并不多, 而常用的Maven命令实际都是基于这些阶段简单组合而成的。因此只要对Maven生命周期有一个基本的理解,就可以正确而熟练的使用Maven命令。

 

注: 摘取自《Maven实战》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值