2. maven生命周期

轉(zhuǎn)載

我們?cè)陂_發(fā)項(xiàng)目的時(shí)候,不斷地在編譯、測(cè)試、打包、部署等過程,maven的生命周期就是對(duì)所有構(gòu)建過程抽象與統(tǒng)一,生命周期包含項(xiàng)目的清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署、站點(diǎn)生成等幾乎所有的過程。
Maven有三套相互獨(dú)立的生命周期,請(qǐng)注意這里說的是“三套”,而且“相互獨(dú)立”,初學(xué)者容易將Maven的生命周期看成一個(gè)整體,其實(shí)不然。這三套生命周期分別是:

  1. CleanLifecycle 在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作。
  2. DefaultLifecycle 構(gòu)建的核心部分,編譯,測(cè)試,打包,部署等等。
  3. SiteLifecycle 生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。

再次強(qiáng)調(diào)一下它們是相互獨(dú)立的,可以僅僅調(diào)用clean來清理工作目錄,僅僅調(diào)用site來生成站點(diǎn)。當(dāng)然也可以直接運(yùn)行 mvn clean install site 運(yùn)行所有這三套生命周期。
每套生命周期都由一組階段(Phase)組成,我們平時(shí)在命令行輸入的命令總會(huì)對(duì)應(yīng)于一個(gè)特定的階段。maven中所有的執(zhí)行動(dòng)作(goal)都需要指明自己在這個(gè)過程中的執(zhí)行位置,然后maven執(zhí)行的時(shí)候,就依照過程的發(fā)展依次調(diào)用這些goal進(jìn)行各種處理。這個(gè)也是maven的一個(gè)基本調(diào)度機(jī)制。
每套生命周期還可以細(xì)分成多個(gè)階段。

cleanLifecycle

Clean生命周期一共包含了三個(gè)階段:

  1. pre-clean 執(zhí)行一些需要在clean之前完成的工作
  2. clean 移除所有上一次構(gòu)建生成的文件
  3. post-clean 執(zhí)行一些需要在clean之后立刻完成的工作

命令mvn clean中的就是代表執(zhí)行上面的clean階段,在一個(gè)生命周期中,運(yùn)行某個(gè)階段的時(shí)候,它之前的所有階段都會(huì)被運(yùn)行,也就是說,mvn clean 等同于 mvn pre-clean clean ,如果我們運(yùn)行mvn post-clean ,那么 pre-clean,clean 都會(huì)被運(yùn)行。這是Maven很重要的一個(gè)規(guī)則,可以大大簡(jiǎn)化命令行的輸入。

DefaultLifecycle

Maven最重要就是的Default生命周期,也稱構(gòu)建生命周期,絕大部分工作都發(fā)生在這個(gè)生命周期中,每個(gè)階段的名稱與功能如下:

  1. validate 驗(yàn)證項(xiàng)目是否正確,以及所有為了完整構(gòu)建必要的信息是否可用
  2. initialize 初始化構(gòu)建狀態(tài),比如設(shè)置屬性或者創(chuàng)建目錄
  3. generate-sources 生成所有需要包含在編譯過程中的源代碼
  4. process-sources 處理源代碼,比如過濾一些值
  5. generate-resources 生成所有需要包含在打包過程中的資源文件
  6. process-resources 復(fù)制并處理資源文件至目標(biāo)目錄,準(zhǔn)備打包
  7. compile 編譯項(xiàng)目的源代碼
  8. process-classes 后處理編譯生成的文件,例如對(duì)Java類進(jìn)行字節(jié)碼增強(qiáng)(bytecode enhancement)
  9. generate-test-sources 生成所有包含在測(cè)試編譯過程中的測(cè)試源碼
  10. process-test-sources 處理測(cè)試源碼,比如過濾一些值
  11. generate-test-resources 生成測(cè)試需要的資源文件
  12. process-test-resources 復(fù)制并處理測(cè)試資源文件至測(cè)試目標(biāo)目錄
  13. test-compile 編譯測(cè)試源碼至測(cè)試目標(biāo)目錄
  14. test 使用合適的單元測(cè)試框架運(yùn)行測(cè)試。這些測(cè)試應(yīng)該不需要代碼被打包或發(fā)布
  15. prepare-package 在真正的打包之前,執(zhí)行一些準(zhǔn)備打包必要的操作
  16. package 將編譯好的代碼打包成可分發(fā)的格式,如JAR,WAR,或者EAR
  17. pre-integration-test 執(zhí)行一些在集成測(cè)試運(yùn)行之前需要的動(dòng)作。如建立集成測(cè)試需要的環(huán)境
  18. integration-test 如果有必要的話,處理包并發(fā)布至集成測(cè)試可以運(yùn)行的環(huán)境
  19. post-integration-test 執(zhí)行一些在集成測(cè)試運(yùn)行之后需要的動(dòng)作。如清理集成測(cè)試環(huán)境。
  20. verify 執(zhí)行所有檢查,驗(yàn)證包是有效的,符合質(zhì)量規(guī)范
  21. install 安裝包至本地倉(cāng)庫(kù),以備本地的其它項(xiàng)目作為依賴使用
  22. deploy 復(fù)制最終的包至遠(yuǎn)程倉(cāng)庫(kù),共享給其它開發(fā)人員和項(xiàng)目(通常和一次正式的發(fā)布相關(guān))

可見,構(gòu)建生命周期被細(xì)分成了22個(gè)階段,但是我們沒必要對(duì)每個(gè)階段都了如指掌,經(jīng)常關(guān)聯(lián)使用的只有process-test-resources、test、package、install、deploy等幾個(gè)階段而已。
一般來說,位置稍后的過程都會(huì)依賴于之前的過程。這也就是為什么我們運(yùn)行mvn install 的時(shí)候,代碼會(huì)被編譯,測(cè)試,打包。當(dāng)然,maven同樣提供了配置文件,可以依照用戶要求,跳過某些階段。比如有時(shí)候希望跳過測(cè)試階段而直接install,因?yàn)閱卧獪y(cè)試如果有任何一條沒通過,maven就會(huì)終止后續(xù)的工作。

siteLifecycle

  1. pre-site 執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作
  2. site 生成項(xiàng)目的站點(diǎn)文檔
  3. post-site 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備
  4. site-deploy 將生成的站點(diǎn)文檔部署到特定的服務(wù)器上

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

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

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

  • 所有項(xiàng)目的構(gòu)建都是有生命周期的,這個(gè)生命周期包括:項(xiàng)目清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署、站點(diǎn)生...
    zlcook閱讀 3,003評(píng)論 0 21
  • 當(dāng)前,JVM生態(tài)圈主要的三大構(gòu)建工具: Apache Ant(帶著Ivy) Maven Gradle 對(duì)于剛開始接...
    清楓_小天閱讀 5,986評(píng)論 1 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 生命周期是maven的又一大核心,maven的生命周期是抽象的,而實(shí)際行為都是以插件的方式來完成的,下面我將對(duì)生命...
    小煉君閱讀 1,313評(píng)論 0 50
  • Maven聚合模塊: 因?yàn)镸aven是提倡模塊化編程的,所以會(huì)以多個(gè)工程分為多個(gè)模塊。如果所有的功能、模塊都寫在一...
    凱哥學(xué)堂閱讀 827評(píng)論 0 4

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