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