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

Maven 構(gòu)建生命周期定義了一個項目構(gòu)建跟發(fā)布的過程。我們在開發(fā)項目的時候,不斷地在編譯、測試、打包、部署等過程,maven的生命周期就是對所有構(gòu)建過程抽象與統(tǒng)一,生命周期包含項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生成等幾乎所有的過程。

Maven 有以下三個標準的生命周期:

  • clean:項目清理的處理
  • default(或 build):項目部署的處理
  • site:項目站點文檔創(chuàng)建的處理

構(gòu)建階段由插件目標構(gòu)成

一個插件目標代表一個特定的任務(wù)(比構(gòu)建階段更為精細),這有助于項目的構(gòu)建和管理。這些目標可能被綁定到多個階段或者無綁定。不綁定到任何構(gòu)建階段的目標可以在構(gòu)建生命周期之外通過直接調(diào)用執(zhí)行。這些目標的執(zhí)行順序取決于調(diào)用目標和構(gòu)建階段的順序。

例如下面的命令:

cleanpakage 是構(gòu)建階段,dependency:copy-dependencies 是目標

mvn clean dependency:copy-dependencies package

這里的 clean 階段將會被首先執(zhí)行,然后 dependency:copy-dependencies 目標會被執(zhí)行,最終 package 階段被執(zhí)行。


Clean 生命周期

CleanLifecycle

當我們執(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) 生命周期

DefaultLifecycle

這是 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 拷貝和處理資源文件到目的目錄中,為打包階段做準備。
compile 編譯工程源碼。
process-classes 處理編譯生成的文件,例如 Java Class 字節(jié)碼的加強和優(yōu)化。
generate-test-sources 生成編譯階段需要包含的任何測試源代碼。
process-test-sources 處理測試源代碼,例如,過濾任何值(filter any values)。
test-compile 編譯測試源代碼到測試目的目錄。
process-test-classes 處理測試代碼文件編譯后生成的文件。
test 使用適當?shù)膯卧獪y試框架(例如JUnit)運行測試。
prepare-package 在真正打包之前,為準備打包執(zhí)行任何必要的操作。
package 獲取編譯后的代碼,并按照可發(fā)布的格式進行打包,例如 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 拷貝最終的工程包到遠程倉庫中,以共享給其他開發(fā)人員和工程。

有一些與 Maven 生命周期相關(guān)的重要概念需要說明:
當一個階段通過 Maven 命令調(diào)用時,例如 mvn compile,只有該階段之前以及包括該階段在內(nèi)的所有階段會被執(zhí)行。
不同的 maven 目標將根據(jù)打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。

Site 生命周期

SiteLifecycle

Maven Site 插件一般用來創(chuàng)建新的報告文檔、部署站點等。

生命周期階段 描述
pre-site 執(zhí)行一些需要在生成站點文檔之前完成的工作
site 生成項目的站點文檔
post-site 執(zhí)行一些需要在生成站點文檔之后完成的工作,并且為部署做準備
site-deploy 將生成的站點文檔部署到特定的服務(wù)器上

這里經(jīng)常用到的是site階段和site-deploy階段,用以生成和發(fā)布Maven站點,這可是Maven相當強大的功能。

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

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

  • 什么是構(gòu)建生命周期 構(gòu)建生命周期是一組階段的序列(sequence of phases),每個階段定義了目標被執(zhí)行...
    小孩真笨閱讀 341評論 0 0
  • 什么是構(gòu)建生命周期 Maven的構(gòu)建過程被分解為構(gòu)建生命周期、階段和目標。一個構(gòu)建周期由一系列的構(gòu)建階段組成,每一...
    歐余山南閱讀 962評論 0 0
  • 所有項目的構(gòu)建都是有生命周期的,這個生命周期包括:項目清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生...
    zlcook閱讀 3,000評論 0 21
  • 當前,JVM生態(tài)圈主要的三大構(gòu)建工具: Apache Ant(帶著Ivy) Maven Gradle 對于剛開始接...
    清楓_小天閱讀 5,986評論 1 13
  • 今年,35歲,如果,生命有幸能行至古來稀的70歲,那么,我已走過人生一半的行程,回望過去的35年,一幕幕似乎就在眼...
    水潤兒閱讀 269評論 5 3

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