关于maven生命周期的理解

晚上有点无聊,看到了一些东西引发了自己的思路,就想将maven的一些东西总结总结,有从网上抄的,也有自己的思路。

一、生命周期是指什么(lifecycle)

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
在这里插入图片描述

二、阶段(phase)

阶段是生命周期的组成部分。特点:阶段在生命周期内具有顺序性,在执行生命周期中某个阶段时会先顺序执行本周期当前阶段之前的所有阶段,再执行当前阶段。
例如:clean周期共有3个阶段,按顺序分别如下:
pre-clean
clean
post-clean
生命周期及其包含阶段,阶段声明绑定的插件目标见下表
在这里插入图片描述
生命周期default(23个阶段
在这里插入图片描述
生命周期site(4个阶段)
在这里插入图片描述
由此我们可以知道当我们执行了一个生命周期其实并不是单纯的执行了一个东西,而是执行了很多阶段

三、插件(plugin)和目标(goal)

阶段的执行依赖插件和目标。(对于这句话看个人理解,不太好翻译,官方原话:A Build Phase is Made Up of Plugin Goals)插件从本质上来说插件j是打成jar包的java程序,目标应该是程序的参数。
插件可以单独执行 例如 :

mvn verify install:install

上面所说的生命周期的各个阶段都是抽象的概念(就是说自己抽象出来的阶段),真正干活的是一个个的插件,插件是以独立的构件形式存在,我们将maven的生命周期的各个阶段与maven的插件进行绑定,当我们执行mvn命令其实就是在指挥着一个个的插件在干活。

maven的插件以独立的构件形式存在,为了能够复用代码,使得一个插件可以完成多个任务,我们定义了插件目标(Plugin Goal),每一个目标都可以完成不同的功能。在IDEA下图中的位置上可以执行Goal
在这里插入图片描述
maven-dependency-plugin插件具有多个功能,比如分析项目依赖,还能列出项目的依赖树等。就是使用了analyze, tree和list等插件目标区分的。
dependency : analyze
dependency : tree
denpendency : list

当然为了能够让用户更加方便的构建项目,maven将大多数主要的生命周期阶段都绑定了很多插件的目标。如下所示:
在这里插入图片描述

上面图片中红框框住的就是插件名称,绿色框框住的就是插件的目标。那么一个插件又有哪些目标呢,大家可以打开上面给出的maven官方插件列表的网址
http://maven.apache.org/plugins/index.html
在maven给出的官方文档中可以看到其实我们在执行某个生命周期的时候并不是简单的执行了一步而是执行了很多步

现在我们来看下上面的pom文件,我们如配置了maven-compiler-plugin这个插件,其它的插件没有配置,但最后项目构建成功,说明maven内置的各种插件,如果pom中没有配置就调用默认的内置插件,如果pom中配置了就调用配置的插件。到此我们理解maven的构建过程或者有更多的人称是打包,就是由各种插件按照一定的顺序执行来完成项目的编译,单元测试、打包、布署的完成。各种插件的执行过程也就构成的maven的生命周期(lifecycle)。生命周期(lifecycle)各个阶段并非不能独立的,可以单独执行如mvn clean,也可以一起执行如mvn clean install。而且有的mvn命令其是包括多个阶段的,如mvn compile其是包括了resources和compile两个阶段。下面分别来分析各个阶段需要的插件和输出的结果。

四、着重介绍几个比较重要的常用的插件

clean阶段是独立的一个阶段,功能就是清除工程目前下的target目录,对应的插件是 maven-clean-plugin,可以使用maven内置的插件,当然也可以自己在pom中配置。

resource插件的功能就是把项目需要的配置文件拷贝到指定的目录,默认是拷贝src\main\resources目录下的文件到classes目录下,当然可以自己来配置源目录和输出目录。resources插件一般不单独执行,complie插件执行时会先调用resources插件。

compile插件执行时先调用resouces插件,功能就是把src\mainjava源码编译成字节码生成class文件,并把编译好的class文件输出到target\classes目录下。

单元测试所用的compile和resources插件和主代码是相同的,但执行的目标不同,目标testCompile和testResources是把src\test\java下的代码编译成字节码输出到target\test-classes,同时把src\test\resources下的配置文件拷贝到target\test-classes。

五、总结

本文阐述了maven中的两个重要概念生命周期和插件。正是生命周期阶段和插件的互相绑定,我们才能真正完成项目的构建。常用的插件如下:

maven-assembly-plugin :自定义打包方式,还是很有趣的,感兴趣的可以研究哦

maven-enforcer-plugin :展示项目依赖冲突

maven-antrun-plugin :运行ant脚本

maven-dependency-plugin :分析项目依赖

maven-clean-plugin :清理

maven-compiler-plugin :编译

maven-source-plugin :源码

maven-war-plugin :打包

maven-jar-plugin:打包

maven-surefire-plugin :测试

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值