Maven - 構(gòu)建生命周期

什么是構(gòu)建生命周期

階段 處理 描述
準(zhǔn)備資源 資源復(fù)制 資源復(fù)制可以進(jìn)行定制
編譯 compile 執(zhí)行編譯 源代碼編譯在此階段完成
包裝 package 打包 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包
安裝 install 安裝 這一階段在本地/遠(yuǎn)程Maven倉庫安裝程序包

Maven的構(gòu)建過程被分解為構(gòu)建生命周期、階段和目標(biāo)。一個構(gòu)建周期由一系列的構(gòu)建階段組成,每一個構(gòu)建階段由一系列的目標(biāo)組成。當(dāng)你運(yùn)行Maven的時候,你會傳入一條命令。這條命令就是構(gòu)建生命周期、階段或目標(biāo)的名字。如果執(zhí)行一個生命周期,該生命周期內(nèi)的所有構(gòu)建階段都會被執(zhí)行。如果執(zhí)行一個構(gòu)建階段,在預(yù)定義的構(gòu)建階段中,所有處于當(dāng)前構(gòu)建階段之前的階段也都會被執(zhí)行。
一個典型的 Maven 構(gòu)建生命周期是由下列順序的階段:

階段 處理 描述
準(zhǔn)備資源 資源復(fù)制 資源復(fù)制可以進(jìn)行定制
編譯 compile 執(zhí)行編譯 源代碼編譯在此階段完成
包裝 package 打包 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包
安裝 install 安裝 這一階段在本地/遠(yuǎn)程Maven倉庫安裝程序包

Maven 的內(nèi)部有三個構(gòu)建生命周期,分別是 clean, default, site。其中 default 生命周期包含有23個階段,其核心階段如下所示:

生命周期階段 描述
validate 檢查工程配置是否正確,完成構(gòu)建過程的所有必要信息是否能夠獲取到。
compile 編譯工程源碼。
test 使用適當(dāng)?shù)膯卧獪y試框架(例如JUnit)運(yùn)行測試。
package 獲取編譯后的代碼,并按照可發(fā)布的格式進(jìn)行打包,例如 JAR、WAR 或者 EAR 文件。
verify 運(yùn)行檢查操作來驗(yàn)證工程包是有效的,并滿足質(zhì)量要求。
install 安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴。
deploy 拷貝最終的工程包到遠(yuǎn)程倉庫中,以共享給其他開發(fā)人員和工程。
生命周期主要階段
生命周期階段 描述
validate 檢查工程配置是否正確,完成構(gòu)建過程的所有必要信息是否能夠獲取到。
compile 編譯工程源碼。
test 使用適當(dāng)?shù)膯卧獪y試框架(例如JUnit)運(yùn)行測試。
package 獲取編譯后的代碼,并按照可發(fā)布的格式進(jìn)行打包,例如 JAR、WAR 或者 EAR 文件。
verify 運(yùn)行檢查操作來驗(yàn)證工程包是有效的,并滿足質(zhì)量要求。
install 安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴。
deploy 拷貝最終的工程包到遠(yuǎn)程倉庫中,以共享給其他開發(fā)人員和工程。

當(dāng)一個階段通過 Maven 命令調(diào)用時,例如 mvn compile,只有該階段之前以及包括該階段在內(nèi)的所有階段會被執(zhí)行。
不同的 maven 目標(biāo)將根據(jù)打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。
可以指定多個不同構(gòu)建生命周期的階段,執(zhí)行 mvn clean deploy 命令,首先完成的 clean lifecycle,將以前構(gòu)建的文件清理,然后再執(zhí)行 default lifecycle 的 validate, compile, test, package, verify, insstall, deploy 階段,將 package 階段創(chuàng)建的包發(fā)布到遠(yuǎn)程倉庫中。

階段與插件的關(guān)系

Maven 將構(gòu)建過程定義為 default lifecycle,并將 default lifecycle 劃分為一個個的階段 phase,這一系列 phase 僅僅是規(guī)定執(zhí)行順序,每個階段做什么工作?有誰來做,是由插件(plugins)來處理的。
一個插件可以支持多種功能,稱之為目標(biāo)(goal),例如:compiler 插件有兩個目標(biāo):compile 和 testCompile,分別實(shí)現(xiàn)編譯源代碼 和 編譯測試代碼。
通過將插件的目標(biāo)(goal)與 build lifecycle 中 phase 綁定到一起,這樣,當(dāng)要執(zhí)行某個 phase 時,就調(diào)用插件來完成綁定的目標(biāo)。
從圖中可以看出,每一個階段可以綁定0 個 或 多個目標(biāo),每個插件可以提供 1 個或多個目標(biāo)。

階段與插件關(guān)系圖

如何為工程創(chuàng)建構(gòu)建生命周期

階段 目標(biāo)
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy

例如設(shè)置不同的packaging類型:在 pom.xml 文件中,packaging 類型支持 jar, war, ear, pom 等多種類型,不同的 packaging 類型會使得不同的 phase 綁定不同的 plugin goal。下面是 packaging 類型為 jar 時,phase 與 plugin goal 的映射關(guān)系。

階段 目標(biāo)
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy

配置插件

在 pom.xml 文件中, <build> <plugins> 元素下可以添加 <plugin>,通過指定 goal 和 phase 來進(jìn)行綁定。
例如:將插件 modello-maven-plugin 的 java 目標(biāo)綁定到 generate-sources 階段。

<plugin>
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-maven-plugin</artifactId>
<version>1.8.1</version>
<executions>
<execution>
<configuration>
<models>
<model>src/main/mdo/maven.mdo</model>
</models>
<version>4.0.0</version>
</configuration>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
</plugin>

沒有配置任何插件的情況下,maven會使用自己默認(rèn)的配置插件:
沒有配置任何 plugin 的 pom.xml,執(zhí)行 mvn install 的輸出日志,從日志中可以看到 一系列的 插件(plugin):版本號:目標(biāo)(phase),例如

maven-resources-plugin:2.6:resources (default-resources),maven-compiler-plugin:3.1:compile (default-compile) ,
maven-resources-plugin:2.6:testResources (default-testResources),maven-compiler-plugin:3.1:testCompile (default-testCompile),
maven-surefire-plugin:2.12.4:test (default-test),
maven-jar-plugin:2.4:jar (default-jar) ,
maven-install-plugin:2.4:install (default-install)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 所有項(xiàng)目的構(gòu)建都是有生命周期的,這個生命周期包括:項(xiàng)目清理、初始化、編譯、測試、打包、集成測試、驗(yàn)證、部署、站點(diǎn)生...
    zlcook閱讀 2,999評論 0 21
  • 什么是構(gòu)建生命周期 構(gòu)建生命周期是一組階段的序列(sequence of phases),每個階段定義了目標(biāo)被執(zhí)行...
    小孩真笨閱讀 341評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 1. Maven 構(gòu)建生命周期 Maven 構(gòu)建生命周期就是 Maven 將一個整體任務(wù)劃分為一個個的階段,類似于...
    data4閱讀 31,381評論 3 35
  • 各位婊貝兒好久不賤,我是詩兄,今天這么哇塞的天氣最適合出來浪了~ 為毛微信朋友圈總是混進(jìn)一些奇怪的動西? 如果不出...
    詩與胡說官微閱讀 524評論 0 0

友情鏈接更多精彩內(nèi)容