###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目标,它并不会去编译代码
###查看phase默认插件的execution的id 见maven pom进阶教程 - 插件与继承(plugin & inherite)
###禁用默认插件的方法 方法1: 改掉默认插件配置的phase(官方文档上并没有写这个方法)
<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的配置资料
<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阶段执行
<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>