我們在開發(fā)項目的時候,不斷地在編譯礁苗、測試爬凑、打包、部署等過程试伙,maven的生命周期就是對所有構(gòu)建過程抽象與統(tǒng)一嘁信,生命周期包含項目的清理、初始化疏叨、編譯潘靖、測試、打包蚤蔓、集成測試卦溢、驗證、部署昌粤、站點生成等幾乎所有的過程既绕。
Maven有三套相互獨立的生命周期,請注意這里說的是“三套”涮坐,而且“相互獨立”凄贩,初學(xué)者容易將Maven的生命周期看成一個整體,其實不然袱讹。這三套生命周期分別是:
-
CleanLifecycle
在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作疲扎。 -
DefaultLifecycle
構(gòu)建的核心部分昵时,編譯,測試椒丧,打包壹甥,部署等等。 -
SiteLifecycle
生成項目報告壶熏,站點句柠,發(fā)布站點。
再次強(qiáng)調(diào)一下它們是相互獨立的棒假,可以僅僅調(diào)用clean
來清理工作目錄溯职,僅僅調(diào)用site
來生成站點。當(dāng)然也可以直接運行 mvn clean install site
運行所有這三套生命周期帽哑。
每套生命周期都由一組階段(Phase)組成谜酒,我們平時在命令行輸入的命令總會對應(yīng)于一個特定的階段。maven中所有的執(zhí)行動作(goal)都需要指明自己在這個過程中的執(zhí)行位置妻枕,然后maven執(zhí)行的時候僻族,就依照過程的發(fā)展依次調(diào)用這些goal進(jìn)行各種處理。這個也是maven的一個基本調(diào)度機(jī)制屡谐。
每套生命周期還可以細(xì)分成多個階段述么。
cleanLifecycle
Clean生命周期一共包含了三個階段:
-
pre-clean
執(zhí)行一些需要在clean之前完成的工作 -
clean
移除所有上一次構(gòu)建生成的文件 -
post-clean
執(zhí)行一些需要在clean之后立刻完成的工作
命令mvn clean
中的就是代表執(zhí)行上面的clean
階段,在一個生命周期中康嘉,運行某個階段的時候碉输,它之前的所有階段都會被運行籽前,也就是說亭珍,mvn clean
等同于 mvn pre-clean clean
,如果我們運行mvn post-clean
枝哄,那么 pre-clean
肄梨,clean
都會被運行。這是Maven很重要的一個規(guī)則挠锥,可以大大簡化命令行的輸入众羡。
DefaultLifecycle
Maven最重要就是的Default生命周期,也稱構(gòu)建生命周期蓖租,絕大部分工作都發(fā)生在這個生命周期中粱侣,每個階段的名稱與功能如下:
-
validate
驗證項目是否正確,以及所有為了完整構(gòu)建必要的信息是否可用 -
initialize
初始化構(gòu)建狀態(tài)蓖宦,比如設(shè)置屬性或者創(chuàng)建目錄 -
generate-sources
生成所有需要包含在編譯過程中的源代碼 -
process-sources
處理源代碼齐婴,比如過濾一些值 -
generate-resources
生成所有需要包含在打包過程中的資源文件 -
process-resources
復(fù)制并處理資源文件至目標(biāo)目錄,準(zhǔn)備打包 -
compile
編譯項目的源代碼 -
process-classes
后處理編譯生成的文件稠茂,例如對Java類進(jìn)行字節(jié)碼增強(qiáng)(bytecode enhancement) -
generate-test-sources
生成所有包含在測試編譯過程中的測試源碼 -
process-test-sources
處理測試源碼柠偶,比如過濾一些值 -
generate-test-resources
生成測試需要的資源文件 -
process-test-resources
復(fù)制并處理測試資源文件至測試目標(biāo)目錄 -
test-compile
編譯測試源碼至測試目標(biāo)目錄 -
test
使用合適的單元測試框架運行測試。這些測試應(yīng)該不需要代碼被打包或發(fā)布 -
prepare-package
在真正的打包之前,執(zhí)行一些準(zhǔn)備打包必要的操作 -
package
將編譯好的代碼打包成可分發(fā)的格式诱担,如JAR毡证,WAR,或者EAR -
pre-integration-test
執(zhí)行一些在集成測試運行之前需要的動作蔫仙。如建立集成測試需要的環(huán)境 -
integration-test
如果有必要的話料睛,處理包并發(fā)布至集成測試可以運行的環(huán)境 -
post-integration-test
執(zhí)行一些在集成測試運行之后需要的動作。如清理集成測試環(huán)境摇邦。 -
verify
執(zhí)行所有檢查秦效,驗證包是有效的,符合質(zhì)量規(guī)范 -
install
安裝包至本地倉庫涎嚼,以備本地的其它項目作為依賴使用 -
deploy
復(fù)制最終的包至遠(yuǎn)程倉庫阱州,共享給其它開發(fā)人員和項目(通常和一次正式的發(fā)布相關(guān))
可見,構(gòu)建生命周期被細(xì)分成了22個階段法梯,但是我們沒必要對每個階段都了如指掌苔货,經(jīng)常關(guān)聯(lián)使用的只有process-test-resources、test立哑、package夜惭、install、deploy等幾個階段而已铛绰。
一般來說诈茧,位置稍后的過程都會依賴于之前的過程。這也就是為什么我們運行mvn install
的時候捂掰,代碼會被編譯敢会,測試,打包这嚣。當(dāng)然鸥昏,maven同樣提供了配置文件,可以依照用戶要求姐帚,跳過某些階段吏垮。比如有時候希望跳過測試階段而直接install,因為單元測試如果有任何一條沒通過罐旗,maven就會終止后續(xù)的工作膳汪。
siteLifecycle
-
pre-site
執(zhí)行一些需要在生成站點文檔之前完成的工作 -
site
生成項目的站點文檔 -
post-site
執(zhí)行一些需要在生成站點文檔之后完成的工作,并且為部署做準(zhǔn)備 -
site-deploy
將生成的站點文檔部署到特定的服務(wù)器上
這里經(jīng)常用到的是site階段和site-deploy階段九秀,用以生成和發(fā)布Maven站點遗嗽,這是Maven相當(dāng)強(qiáng)大的功能。