讀古今文學網 > Maven實戰 > 7.4.1 內置綁定 >

7.4.1 內置綁定

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

clean生命週期僅有pre-clean、clean和post-clean三個階段,其中的clean與maven-clean-plugin:clean綁定。maven-clean-plugin僅有clean這一個目標,其作用就是刪除項目的輸出目錄。clean生命週期階段與插件目標的綁定關係如表7-1所示。

site生命週期有pre-site、site、post-site和site-deploy四個階段,其中,site和maven-site-plugin:site相互綁定,site-deploy和maven-site-plugin:depoy相互綁定。maven-site-plugin有很多目標,其中,site目標用來生成項目站點,deploy目標用來將項目站點部署到遠程服務器上。site生命週期階段與插件目標的綁定關係如表7-2所示。

表7-1 clean生命週期階段與插件

表7-2 site生命週期階段與插件

相對於clean和site生命週期來說,default生命週期與插件目標的綁定關係就顯得複雜一些。這是因為對於任何項目來說,例如jar項目和war項目,它們的項目清理和站點生成任務是一樣的,不過構建過程會有區別。例如jar項目需要打成JAR包,而war項目需要打成WAR包。

由於項目的打包類型會影響構建的具體過程,因此,default生命週期的階段與插件目標的綁定關係由項目打包類型所決定,打包類型是通過POM中的packaging元素定義的,具體可回顧第5.2節。最常見、最重要的打包類型是jar,它也是默認的打包類型。基於該打包類型的項目,其default生命週期的內置插件綁定關係及具體任務如表7-3所示。

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

注意,表7-3只列出了擁有插件綁定關係的階段,default生命週期還有很多其他階段,默認它們沒有綁定任何插件,因此也沒有任何實際行為。

除了默認的打包類型jar之外,常見的打包類型還有war、pom、maven-plugin、ear等。它們的default生命週期與插件目標的綁定關係可參閱Maven官方文檔:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings,這裡不再贅述。

讀者可以從Maven的命令行輸出中看到在項目構建過程執行了哪些插件目標,例如基於account-email執行mvn clean install命令,可以看到如下輸出,見代碼清單7-2。

代碼清單7-2 Maven輸出中包含了生命週期階段與插件的綁定關係

從輸出中可以看到,執行的插件目標依次為maven-clean-plugin:clean、maven-resources-plugin:resources、maven-compiler-plugin:compile、maven-resources-plugin:testResources、maven-compiler-plugin:testCompile、maven-surefire-plugin:test、maven-jar-plugin:jar和maven-install-plugin:install。我們知道,mvn clean install命令實際調用了clean生命週期的pre-clean、clean階段,以及default生命週期的從validate至install所有階段。在此基礎上,通過對照表7-1和表7-3,就能從理論上得到將會執行的插件目標任務,而實際的輸出完全驗證了這一點。