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>
相關文章
相關標籤/搜索