Maven生命周期介紹

生命周期的概念與意義

在項(xiàng)目構(gòu)建時(shí)通常會(huì)包含清理、編譯、測試、打包、驗(yàn)證、部署,文檔生成等步驟,maven 統(tǒng)一對其進(jìn)行了整理抽像成三個(gè)生命周期 (lifecycle)及各自對應(yīng)的多個(gè)階段(phase)。這么做的意義是:

  1. 每個(gè)階段都成為了一個(gè)擴(kuò)展點(diǎn),可以采用不同的方式來實(shí)現(xiàn),提高了擴(kuò)展性與靈活性。
  2. 規(guī)范統(tǒng)一了maven 的執(zhí)行路徑。

在執(zhí)行項(xiàng)目構(gòu)建階段時(shí)可以采用jar方式構(gòu)建也可以采用war包方式構(gòu)建,提高了靈活性。我們可以通過命令 mvn ${phase name}直接觸發(fā)指定階段的執(zhí)行。

maven三大生命周期與其對應(yīng)的phase(階段)

maven 總共包含三大生生命周期

  1. clean Lifecycle :清理生命周期,用于于清理項(xiàng)目
  2. default Lifecycle:默認(rèn)生命周期,用于編譯、打包、測試、部署等
  3. site Lifecycle 站點(diǎn)文檔生成,用于構(gòu)建站點(diǎn)文檔


    default生命周期.png

上圖給出了默認(rèn)的生命周期的流程圖,我么可以看到,生命周期也是抽象的流程概念,具體的實(shí)現(xiàn),則是由相應(yīng)的jar實(shí)現(xiàn)。這就好比抽象類或者接口,僅僅定義標(biāo)準(zhǔn),也體現(xiàn)了具體場景中的靈活性。

生命周期(lifecycle) 階段(phase) 描述(describe)
clean Lifecycle pre-clean 預(yù)清理
clean 清理
post-clean 清理之后
default Lifecycle validate 驗(yàn)證
initialize 初始化
generate-sources
process-sources
generate-resources
process-resources
compile 編譯
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile 編譯測試類
process-test-classes
test 執(zhí)行測試
prepare-package 構(gòu)建前準(zhǔn)備
package 打包構(gòu)建
pre-integration-test
integration-test
post-integration-test
verify 驗(yàn)證
install 上傳到本地倉庫
deploy 上傳到遠(yuǎn)程倉庫
site Lifecycle pre-site 準(zhǔn)備構(gòu)建站點(diǎn)
site 構(gòu)建站點(diǎn)
post-site 構(gòu)建站點(diǎn)之后
site-deploy 站點(diǎn)部署

三大生命周期可以相互獨(dú)立執(zhí)行,也可以合在一起執(zhí)行。但lifecycle 中的phase 是有嚴(yán)格執(zhí)行的順序的,比如必須是先執(zhí)行完compile 才能執(zhí)行pakcage 動(dòng)作,此外phase 還有執(zhí)行邏輯存在,即當(dāng)你執(zhí)行一個(gè)phase 時(shí),其前面的phase 會(huì)自動(dòng)執(zhí)行。

生命周期的phase組成了項(xiàng)目過建的完整過程,但這些過程具體由誰來實(shí)現(xiàn)呢?這就是插件,maven 的核心部分代碼量其實(shí)很少,其大部分實(shí)現(xiàn)都是由插件來完成的。比如:test 階段就是由 maven-surefire-plugin 實(shí)現(xiàn)。在pom.xml 中我們可以設(shè)置指定插件目標(biāo)(gogal)與phase 綁定,當(dāng)項(xiàng)目構(gòu)建到達(dá)指定phase時(shí) 就會(huì)觸發(fā)些插件gogal 的執(zhí)行。 一個(gè)插件有時(shí)會(huì)實(shí)現(xiàn)多個(gè)phase,比如:maven-compiler-plugin插件分別實(shí)現(xiàn)了compile 和testCompile。

在我們的項(xiàng)目當(dāng)中并沒有配置 maven-compiler-plugin 插件,但當(dāng)我們執(zhí)行compile 階段時(shí)一樣能夠執(zhí)行編譯操作,原因是maven 默認(rèn)為指定階段綁定了插件實(shí)現(xiàn)。

下表列舉了各個(gè)階段的默認(rèn)綁定插件,數(shù)據(jù)來源于Maven官網(wǎng)。
Clean Lifecycle Bindings

Phase plugin:goal
clean clean:clean

Default Lifecycle Bindings - Packaging ear

Phase plugin:goal
generate-resources ear:generate-application-xml
process-resources resources:resources
package ear:ear
install install:install
deploy deploy:deploy

Default Lifecycle Bindings - Packaging jar

Phase plugin:goal
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

Default Lifecycle Bindings - Packaging maven-plugin

Phase plugin:goal
generate-resources plugin:descriptor
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test

Site Lifecycle Bindings

Phase plugin:goal
site site:site
site-deploy site:deploy

從表格數(shù)據(jù)我們可以看出,package階段綁定插件非常靈活,生成不同的類型包,如jar,war或者ear,對應(yīng)的默認(rèn)插件是不同的。

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

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

  • Hello!你好! 這里是心晴的育兒說! 生活中,有些孩子往往不愛說話,尤其是在陌生的環(huán)境中幾乎...
    H黃老師H閱讀 374評論 0 4
  • 我從未體驗(yàn)過生身母親對我的慈愛,所以當(dāng)我讀到一個(gè)市委書記下鄉(xiāng)考察時(shí)所記錄的母親們時(shí),我早已哽咽成了一個(gè)淚人。這些偉...
    知更鳥and花妖閱讀 405評論 0 1
  • 前段時(shí)間聽網(wǎng)上一個(gè)講英語寫作的課,黃老師說,對于學(xué)生的寫作,老師要盡量減少學(xué)生的不確定性。 比如學(xué)生作文的書寫,要...
    啊攀攀了閱讀 656評論 4 3
  • 有的人家已開始升火煮早飯了,裊裊炊煙從煙囪中婀娜的漫出來,伴著清晨微微的輕風(fēng)又慵懶的飄向遠(yuǎn)方,最后也消失在天空中。...
    風(fēng)過無痕心易冷閱讀 218評論 0 0
  • 我們要經(jīng)常整理一下自己的生活,看看哪些是我們已擁有卻常常忽視的, 那些是我們得不到卻一直苦苦追尋的。那些被我們忽視...
    Rita愛閱讀 255評論 0 1

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