Maven 生命周期
Maven 生命周期是為了對(duì)所有的構(gòu)建過(guò)程進(jìn)行抽象和統(tǒng)一轰异,開(kāi)發(fā)了一套高度完善的岖沛、易擴(kuò)展的生命周期。這個(gè)生命周期包含了項(xiàng)目的清理搭独、初始化婴削、編譯、測(cè)試牙肝、打包唉俗、集成測(cè)試嗤朴、驗(yàn)證、部署和站點(diǎn)生成等幾乎所有構(gòu)建步驟虫溜。
Maven 生命周期本身不做任何實(shí)際的工作雹姊,實(shí)際的任務(wù)都交給插件來(lái)完成。這樣的設(shè)計(jì)衡楞,既保證了 Maven 整體框架的輕便容为,也最大程度的擴(kuò)展性。
Maven 生命周期抽象了構(gòu)建的各個(gè)步驟寺酪,明確了它們的邏輯次序坎背,但沒(méi)有提供具體的實(shí)現(xiàn),通過(guò)插件來(lái)完成實(shí)際的工作寄雀,每個(gè)構(gòu)建步驟都可以綁定一個(gè)或者多個(gè)插件行為得滤。為了讓 Maven 開(kāi)箱即用,Maven 為大多數(shù)構(gòu)建步驟編寫(xiě)并綁定了默認(rèn)插件盒犹。比如針對(duì)編譯的插件有 maven-compiler-plugin
懂更,針對(duì)測(cè)試的插件有 maven-surefire-plugin
等。
生命周期步驟
在 Maven 中急膀,有三套相互獨(dú)立的生命周期沮协,分別是 clean
、default
和 site
卓嫂。
-
clean
:clean 生命周期的目的是清理項(xiàng)目慷暂; -
default
:default 生命周期的目的是構(gòu)建項(xiàng)目; -
site
:site 生命周期的目的是建立項(xiàng)目站點(diǎn)晨雳;
每個(gè)生命周期包含一些階段(phase)行瑞,這些階段是有順序的,并且后面的階段依賴于前面的階段餐禁。以 clean
生命周期為例血久,它包含的階段有 pre-clean
、clean
和 post-clean
:
- 當(dāng)我們調(diào)用
pre-clean
的時(shí)候帮非,只有pre-clean
階段執(zhí)行氧吐; - 當(dāng)我們調(diào)用
clean
的時(shí)候,pre-clean
和clean
階段會(huì)按順序執(zhí)行末盔; - 當(dāng)我們調(diào)用
post-clean
的時(shí)候筑舅,pre-clean
、clean
和post-clean
都會(huì)按順序執(zhí)行庄岖;
和生命周期階段的前后依賴關(guān)系相比豁翎,clean
角骤、default
和 site
這三套生命周期本身是相互獨(dú)立的隅忿,我們可以僅僅調(diào)用 clean
生命周期的某個(gè)階段心剥,或者僅僅調(diào)用 default
生命周期的某個(gè)階段,而不會(huì)對(duì)其它生命周期產(chǎn)生任何影響背桐。
clean 生命周期
階段 | 執(zhí)行清理前需要完成的工作 |
---|---|
pre-clean | 執(zhí)行清理前需要完成的工作 |
clean | 清理構(gòu)建生成的文件 |
post-clean | 執(zhí)行清理后需要完成的工作 |
default 生命周期
階段 | 執(zhí)行清理前需要完成的工作 |
---|---|
validate | - |
initialize | - |
generate-sources | - |
process-sources | - |
generate-resources | - |
process-resources | 處理項(xiàng)目主資源('src/main/resources')文件优烧,如進(jìn)行變量替換等工作 |
compile | 編譯項(xiàng)目的源碼 |
process-classes | - |
generate-test-sources | - |
process-test-sources | 處理項(xiàng)目測(cè)試資源('src/test/resources')文件 |
generate-test-resources | - |
process-test-resources | - |
test-compile | 編譯項(xiàng)目測(cè)試代碼 |
process-test-classes | - |
test | 使用單元測(cè)試框架運(yùn)行測(cè)試,測(cè)試代碼不會(huì)被打包或部署 |
prepare-package | - |
package | 打包編譯好的代碼 |
pre-integration-test | - |
integration-test | - |
post-integration-test | - |
verify | 包校驗(yàn)操作 |
install | 安裝包到Maven本地倉(cāng)庫(kù) |
deploy | 將包部署到遠(yuǎn)程倉(cāng)庫(kù) |
site 生命周期
階段 | 執(zhí)行清理前需要完成的工作 |
---|---|
pre-site | 在生成項(xiàng)目站點(diǎn)前執(zhí)行一些工作 |
site | 生成項(xiàng)目站點(diǎn)文檔 |
post-site | 在生成項(xiàng)目站點(diǎn)后執(zhí)行一些工作 |
site-deploy | 將生成項(xiàng)目站點(diǎn)發(fā)布到服務(wù)器上 |
常用命令詳解
我們通過(guò) Maven 命令行來(lái)編譯链峭、測(cè)試和打包程序的命令畦娄,而這些命令其實(shí)就是完成了生命周期的操作。
-
mvn clean:調(diào)用插件完成
clean
生命周期的clean
階段的操作弊仪,實(shí)際調(diào)用的是pre-clean
和clean
兩個(gè)階段熙卡; -
mvn test:調(diào)用
default
生命周期對(duì)應(yīng)的階段的插件,完成從validate
到test
階段的所有操作驳癌; -
mvn clean install:調(diào)用
clean
周期的clean
階段和default
的install
階段,實(shí)際調(diào)用的是pre-clean
、clean
以及validate
到install
階段; -
mvn clean deploy site-deploy:調(diào)用完整的三個(gè)生命周期所有階段(
post-clean
不被調(diào)用);