插件綁定

Maven的生命週期與插件相互綁定,用以完成實際的構建任務。具體而言,是生命週期的階段與插件的目標相互綁定,以完成某個具體的構建任務。例如項目編譯這一任務,它對應了default生命週期的compile這一階段,而maven-compiler-plugin這一插件的compile目標可以完成該任務。所以將它們綁定,就能實現項目編譯的目的。apache

1. 內置綁定:bash

爲了能讓用戶幾乎不用任何配置就能構建Maven項目,Maven在覈心爲一些主要的生命週期階段綁定了不少插件的目標,當用戶經過命令行調用生命週期階段的時候,對應的插件目標就會執行相應的任務。服務器

clean生命週期僅有pre-clean、clean和post-clean三個階段,其中的clean與maven-clean-plugin:clean綁定。maven-clean-plugin僅有clean這一個目標,其做用就是刪除項目的輸出目錄。maven

site生命週期有pre-site、site、post-site和site-deploy四個階段。其中site和maven-site-plugin:site相互綁定,site-deploy和maven-site-plugin:deploy相互綁定。maven-site-plugin有不少目標,其中,site目標用來生成項目站點,deploy目標用來將項目站點部署到遠程服務器上。post

default生命週期與插件目標的綁定關係要複雜得多。這是由於對於任何項目來講,例如jar項目和war項目,它們的項目清理和站點生成任務是同樣的,不過構建過程會有區別。例如jar項目須要打包成jar包,而war項目須要打成war包。測試

因爲項目的打包類型會影響構建的具體過程,所以default生命週期的階段與插件目標的綁定關係由項目打包類型所決定。最多見最重要的打包類型是jar,它也是默認的打包類型。基於該打包類型的項目,其default生命週期的內置插件綁定關係及具體任務以下表所示:ui

default生命週期的內置插件綁定關係及具體任務(打包類型:jar):spa

生命週期階段 插件目標 執行任務
process-resources maven-resources-plugin : resources 複製主資源文件至主輸出目錄
compile maven-compiler-plugin : compile 編譯主代碼至主輸出目錄
process-test-resources maven-resources-plugin : testResources 複製測試資源文件至測試輸出目錄
test-compile maven-compiler-plugin : testCompile 編譯測試代碼至測試輸出目錄    
test maven-surefire-plugin : test 執行測試用例
package maven-jar-plugin : jar 建立項目jar包
install maven-install-plugin : install 將項目輸出構件安裝到本地倉庫
deploy maven-deploy-plugin : deploy 將項目輸出構件部署到遠程倉庫

注意上表只列出了擁有插件綁定關係的階段,default生命週期還有不少其餘階段,默認它們沒有綁定任何插件,所以也沒有任何實際行爲。插件

咱們能夠從Maven的命令行輸出中看到在項目構建過程當中執行了哪些插件目標。命令行

2. 自定義綁定:

除了內置綁定外,用戶還可以本身選擇將某個插件目標綁定到生命週期的某個階段上,這種自定義綁定方式能讓Maven項目在構建過程當中執行更多更富特點的任務。

一個常見的例子是建立項目的源碼jar包,內置的插件綁定關係中並無涉及這一任務,所以須要用戶自行配置。maven-source-plugin能夠幫助咱們完成該任務,它的jar-no-fork目標可以將項目的主代碼打包成jar文件,能夠將其綁定到default生命週期的verify階段上,在執行完集成測試後和安裝構件以前建立源碼jar包,具體配置以下:

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>2.1.1</version>
			<executions>
				<execution>
					<id>attach-sources</id>
					<phase>verify</phase>
					<goals>
						<goal>jar-no-fork</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

它會建立一個以-sources.jar結尾的源碼文件包。

有不少插件的目標在編寫時已經定義了默認綁定階段,可使用maven-help-plugin查看插件詳細信息,瞭解插件目標的默認綁定階段:

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1-Ddetail
相關文章
相關標籤/搜索