maven pom进阶教程 - phase与goal

###lifecycle maven定义了生命周期lifecycle的概念,一个生命周期又分为不少个阶段,好比在packaging类型为jar的工程下,执行mvn package这个命令, 它会执行资源处理,编译,打包等步骤(固然不止这三个步骤)。资源处理,编译,打包这些步骤就称之为phase。关于lifecycle和phase的更多资料,能够在官上网查到
http://maven.apache.org/components/ref/3-LATEST/maven-core/lifecycles.html
http://maven.apache.org/components/ref/3-LATEST/maven-core/default-bindings.html
###goal maven的功能是由plugin来完成的。通常的plugin都会包含多个功能,每一个功能都包含一个名称,称之为goal, ###phase、plugin、goal关系 几个关键的phase都会与特定的plugin的某个goal绑定,比较资源处理阶段process-resources与插件maven-resources-plugin的resources进行了绑定,所以执行到process-resources阶段时,maven将调用maven-resources-plugin插件,执行它的resources功能,拷贝资源文件。
###mvn compile与mvn compiler:compile 这两个命令都会执行编译过程,可是前者包含更多的执行步骤。 ###mvn compile
这里的compile是指编译阶段,它会从初始阶段一直执行到编译阶段.compile阶段以前还有这些阶段:
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
所以,mvn compile会执行以上各个阶段所绑定的插件,默认状况下,上面的阶段中只有process-resources绑定了插件,即maven-resources-plugin, 因此这条命令会先拷贝资源文件,而后再去编译, 即mvn compile隐式的调用了resources插件,即便没有在pom.xml中定义resources插件。
###mvn compiler:compile
这条指令中,compiler是指插件的名称,compile是指插件的goal。最终这条指令只是去执行maven-resources-plugin插件的compile目标,并不会拷贝资源文件.
一样的,日常执行的mvn exec:java, 是指执行插件exec-maven-plugin的java目标,它并不会去编译代码html

###查看phase默认插件的execution的idmaven pom进阶教程 - 插件与继承(plugin & inherite)java

###禁用默认插件的方法 方法1: 改掉默认插件配置的phase(官方文档上并无写这个方法)apache

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<version>3.0.2</version>
	<executions>
		<execution>
			<id>default-jar</id> <!-- default-jar是maven默认打包jar的execution的id -->
			<phase>none</phase> <!-- 随便写,只要不存在就行 -->
		</execution>
	</executions>
</plugin>

方法2: 设置skip为true, 只有部分插件支持这个参数, 使用之种方法以前,最好先去查阅一下plugin的配置资料maven

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>3.0.2</version>
	<executions>
		<execution>
			<id>default-resources</id><!-- process-resources阶段的默认有execution的id -->
			<configuration>
				<skip>true</skip> <!--跳过本次任务-->
			</configuration>
		</execution>
	</executions>
</plugin>

###修改默认插件的参数 与上一节相似,指明execution的id为默认id 好比,将拷贝资源的操做更改到validate阶段执行.net

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>3.0.2</version>
	<executions>
		<execution>
			<id>default-resources</id><!-- process-resources阶段的默认有execution的id -->
			<phase>validate</phase>
		</execution>
	</executions>
</plugin>
相关文章
相关标签/搜索