Maven 構(gòu)建生命周期定義了一個項目構(gòu)建跟發(fā)布的過程费封。我們在開發(fā)項目的時候,不斷地在編譯蒋伦、測試弓摘、打包、部署等過程痕届,maven的生命周期就是對所有構(gòu)建過程抽象與統(tǒng)一韧献,生命周期包含項目的清理、初始化研叫、編譯锤窑、測試、打包嚷炉、集成測試渊啰、驗證、部署申屹、站點生成等幾乎所有的過程绘证。
Maven 有以下三個標(biāo)準(zhǔn)的生命周期:
- clean:項目清理的處理
- default(或 build):項目部署的處理
- site:項目站點文檔創(chuàng)建的處理
構(gòu)建階段由插件目標(biāo)構(gòu)成
一個插件目標(biāo)代表一個特定的任務(wù)(比構(gòu)建階段更為精細(xì)),這有助于項目的構(gòu)建和管理独柑。這些目標(biāo)可能被綁定到多個階段或者無綁定迈窟。不綁定到任何構(gòu)建階段的目標(biāo)可以在構(gòu)建生命周期之外通過直接調(diào)用執(zhí)行。這些目標(biāo)的執(zhí)行順序取決于調(diào)用目標(biāo)和構(gòu)建階段的順序忌栅。
例如下面的命令:
clean
和 pakage
是構(gòu)建階段车酣,dependency:copy-dependencies
是目標(biāo)
mvn clean dependency:copy-dependencies package
這里的 clean
階段將會被首先執(zhí)行,然后 dependency:copy-dependencies
目標(biāo)會被執(zhí)行索绪,最終 package
階段被執(zhí)行湖员。
Clean 生命周期
當(dāng)我們執(zhí)行 mvn post-clean 命令時,Maven 調(diào)用 clean 生命周期瑞驱,它包含以下階段:
- pre-clean:執(zhí)行一些需要在clean之前完成的工作
- clean:移除所有上一次構(gòu)建生成的文件
- post-clean:執(zhí)行一些需要在clean之后立刻完成的工作
mvn clean
中的 clean
就是上面的 clean
娘摔,在一個生命周期中,運行某個階段的時候唤反,它之前的所有階段都會被運行凳寺,也就是說鸭津,mvn clean
等同于mvn pre-clean clean
,如果我們運行mvn post-clean
肠缨,那么 pre-clean
逆趋,clean
都會被運行。
Default (Build) 生命周期
這是 Maven 的主要生命周期晒奕,被用于構(gòu)建應(yīng)用闻书,包括下面的 23 個階段:
生命周期階段 | 描述 |
---|---|
validate | 檢查工程配置是否正確,完成構(gòu)建過程的所有必要信息是否能夠獲取到脑慧。 |
initialize | 初始化構(gòu)建狀態(tài)魄眉,例如設(shè)置屬性。 |
generate-sources | 生成編譯階段需要包含的任何源碼文件闷袒。 |
process-sources | 處理源代碼坑律,例如,過濾任何值(filter any value)囊骤。 |
generate-resources | 生成工程包中需要包含的資源文件脾歇。 |
process-resources | 拷貝和處理資源文件到目的目錄中,為打包階段做準(zhǔn)備淘捡。 |
compile | 編譯工程源碼。 |
process-classes | 處理編譯生成的文件池摧,例如 Java Class 字節(jié)碼的加強(qiáng)和優(yōu)化焦除。 |
generate-test-sources | 生成編譯階段需要包含的任何測試源代碼。 |
process-test-sources | 處理測試源代碼作彤,例如膘魄,過濾任何值(filter any values)。 |
test-compile | 編譯測試源代碼到測試目的目錄竭讳。 |
process-test-classes | 處理測試代碼文件編譯后生成的文件创葡。 |
test | 使用適當(dāng)?shù)膯卧獪y試框架(例如JUnit)運行測試。 |
prepare-package | 在真正打包之前绢慢,為準(zhǔn)備打包執(zhí)行任何必要的操作灿渴。 |
package | 獲取編譯后的代碼,并按照可發(fā)布的格式進(jìn)行打包胰舆,例如 JAR骚露、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成測試執(zhí)行之前缚窿,執(zhí)行所需的操作棘幸。例如,設(shè)置所需的環(huán)境變量倦零。 |
integration-test | 處理和部署必須的工程包到集成測試能夠運行的環(huán)境中误续。 |
post-integration-test | 在集成測試被執(zhí)行后執(zhí)行必要的操作蓝纲。例如伦腐,清理環(huán)境。 |
verify | 運行檢查操作來驗證工程包是有效的,并滿足質(zhì)量要求喝检。 |
install | 安裝工程包到本地倉庫中,該倉庫可以作為本地其他工程的依賴摆马。 |
deploy | 拷貝最終的工程包到遠(yuǎn)程倉庫中性穿,以共享給其他開發(fā)人員和工程。 |
有一些與 Maven 生命周期相關(guān)的重要概念需要說明:
當(dāng)一個階段通過 Maven 命令調(diào)用時愕鼓,例如mvn compile
钙态,只有該階段之前以及包括該階段在內(nèi)的所有階段會被執(zhí)行。
不同的 maven 目標(biāo)將根據(jù)打包的類型(JAR / WAR / EAR
)菇晃,被綁定到不同的 Maven 生命周期階段册倒。
Site 生命周期
Maven Site 插件一般用來創(chuàng)建新的報告文檔、部署站點等磺送。
生命周期階段 | 描述 |
---|---|
pre-site | 執(zhí)行一些需要在生成站點文檔之前完成的工作 |
site | 生成項目的站點文檔 |
post-site | 執(zhí)行一些需要在生成站點文檔之后完成的工作驻子,并且為部署做準(zhǔn)備 |
site-deploy | 將生成的站點文檔部署到特定的服務(wù)器上 |
這里經(jīng)常用到的是site階段和site-deploy階段,用以生成和發(fā)布Maven站點估灿,這可是Maven相當(dāng)強(qiáng)大的功能崇呵。