(四)生命周期
1 生命周期
Maven拥有三套相互独立的生命周期,分别是clean、default和site,clean生命周期的目的是清理项目,default生命周期的目的是构建项目,site生命周期的目的是建立项目站点。并且每套声明周期都包含一些阶段,这些阶段是有顺序的,后面阶段要执行必须会调用前面的所有阶段。我们常用的是clean和dault两套生命周期,这里对一些重点阶段讲解:
1.1 clean阶段
常用的是pre-clean、clean两个阶段,用于清理上一次构建生成的文件。
1.2 default阶段
需要重点注意八个阶段:
process-sources:处理项目的主资源文件。指的是对src/main/resources目录的内容进行变量替换等工作后输出到项目输出的主classpath(target/classes)中。
compile:编译项目的主源码。指的是编译src/main/java目录下的Java文件至项目输出的主classpath目录中。
process-test-resources:处理项目的测试资源文件。指的是对src/test/resources目录的内容进行变量替换等工作后输出到项目输出的测试classpath(target/test-classes)中。
test-compile:编译项目的测试源码。指的是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中。
test:使用单元测试框架运行测试。 测试代码不会被打包和部署。
package:将编译好的代码打包成可发布格式,默认为Jar,输出到target目录下。
install:将包安装到本地仓库,供本地其他maven项目直接使用。
deploy:将包上传到远程仓库,其他项目可通过依赖的方式直接使用。
2 插件与生命周期
如上所示,maven的生命周期抽象了构建的各个步骤并定义了它们的次序,但生命周期是抽象的,无法完成具体的构建任务。为此,它设计了插件机制,生命周期阶段与插件的目标相互绑定,以完成某个具体的构建任务(在pom文件中定义插件后通过executions中的phase标签绑定声明周期。有时无需指出插件的生命周期阶段,插件也能绑定到生命周期中,因为部分插件目标在编写时已经定义了默认绑定阶段)。当使用mvn命令时会激活生命周期阶段,从而执行那些绑定在生命周期阶段上的插件目标。
3 插件参数配置
几乎所有的maven插件目标都有一些可配置的参数,在完成插件与生命周期绑定后,可以通过命令行和POM配置等方式来配置这些参数。
3.1 命令行配置
方法:用户可在maven命令中使用-D参数,并伴随一个参数键=参数值的形式来配置插件目标的参数。
原理:参数-D是Java自带的,其功能是通过命令行设置一个Java系统属性,Maven在使用插件时检查系统属性,并根据值的不同改变插件执行行为,从而实现了插件参数的配置。
3.2 POM中全局配置
并不是所有的参数都适合在命令行中进行配置,有些参数从项目创建到项目发布都不会发生变化或者说很少改变,这时使用在POM文件中一次性配置就格外重要,方法是使用configuration进行插件的POM配置,这样所有基于该插件目标的任务,都会使用这些配置。
4 插件解析机制
4.1 插件的仓库布局
插件的仓库布局和管理与依赖上完全一样的。
4.2 默认groupId
如果插件是Maven的官方插件,即groupId=org.apache.maven.plugins,就可以省略groupId,Maven在解析该插件的时候会自动用默认的org.apache.maven.plugins补齐groupId。
4.3 默认版本解析
先补充一个超级pom文件位置:
$MAVEN_HOME/lib/maven-model-builder-xxx.jar
将其解压后超级pom文件位置:
org/apache/maven/model/pom-4.0.0.xml
在用户没有提供插件版本的情况下,Maven会自动解析插件版本,具体的:Maven在超级pom中为所有核心插件设定了版本,超级pom是所有Maven项目的父pom,所有项目都继承这个超级POM的配置,因此,当用户不加版本时会继承超级pom中的插件版本。
如果用户使用某个插件时没有设定版本,而这个插件版本也未在超级pom中定义,Maven就会去检查本地仓库和远程仓库中所有的可用版本并做排序选择最新的release版本作为插件的版本。
有疑问欢迎留言