建立生命周期基礎(chǔ)
Maven基于構(gòu)建生命周期的中心概念蕉拢。這意味著已明確定義了構(gòu)建和分發(fā)特定項(xiàng)目的過(guò)程膀懈。
對(duì)于構(gòu)建項(xiàng)目的人員來(lái)說(shuō)名船,這意味著僅需學(xué)習(xí)少量命令即可構(gòu)建任何Maven項(xiàng)目戳寸,并且POM將確保它們獲得所需的預(yù)期的效果刨仑。
有三個(gè)內(nèi)置的構(gòu)建生命周期:default梧油,清除和站點(diǎn)苫耸。在default生命周期處理你的項(xiàng)目部署中,clean生命周期做清理工作儡陨,而site生命周期創(chuàng)建項(xiàng)目的網(wǎng)站上的文檔褪子。
默認(rèn)生命周期基礎(chǔ)
validate?-驗(yàn)證項(xiàng)目是否正確以及是否有所有必要的信息
compile?-編譯項(xiàng)目的源代碼
test-使用合適的單元測(cè)試框架測(cè)試編譯后的源代碼。這些測(cè)試不應(yīng)要求將代碼打包或部署
package?-獲取編譯后的代碼骗村,并將其打包為可分發(fā)的格式嫌褪,例如JAR。
verify?-對(duì)集成測(cè)試的結(jié)果進(jìn)行任何檢查胚股,以確保符合質(zhì)量標(biāo)準(zhǔn)
install?-將軟件包安裝到本地存儲(chǔ)庫(kù)中笼痛,以作為本地其他項(xiàng)目中的依賴項(xiàng)
deploy?-在構(gòu)建環(huán)境中完成后,將最終軟件包復(fù)制到遠(yuǎn)程存儲(chǔ)庫(kù)中琅拌,以便與其他開發(fā)人員和項(xiàng)目共享缨伊。
這些生命周期階段(加上此處未顯示的其他生命周期階段)將順序執(zhí)行以完成default生命周期。給定上面的生命周期階段进宝,這意味著當(dāng)使用默認(rèn)生命周期時(shí)刻坊,Maven將首先驗(yàn)證項(xiàng)目,然后嘗試編譯源代碼党晋,針對(duì)測(cè)試運(yùn)行源代碼谭胚,打包二進(jìn)制文件(例如jar),針對(duì)該源運(yùn)行集成測(cè)試軟件包未玻,驗(yàn)證集成測(cè)試灾而,將經(jīng)過(guò)驗(yàn)證的軟件包安裝到本地存儲(chǔ)庫(kù),然后將已安裝的軟件包部署到遠(yuǎn)程存儲(chǔ)庫(kù)扳剿。
常規(guī)命令行調(diào)用
此命令按順序執(zhí)行每個(gè)默認(rèn)生命周期階段(validate旁趟,compile,package等)舞终,在執(zhí)行之前verify轻庆。只需調(diào)用要執(zhí)行的最后一個(gè)構(gòu)建phase,在本例中為verify敛劝。在大多數(shù)情況下余爆,效果與相同package。但是夸盟,如果有integration-test蛾方,則也將執(zhí)行這些測(cè)試。并且在此verify階段中,可以執(zhí)行一些其他檢查桩砰,例如拓春,如果代碼是根據(jù)預(yù)定義的checkstyle規(guī)則編寫的。
通常不從命令行調(diào)用某些階段
通常不從命令行直接調(diào)用以連字號(hào)(pre-*亚隅,post-*或process-*)命名的phase硼莽。這些phase對(duì)構(gòu)建進(jìn)行排序,產(chǎn)生中間結(jié)果煮纵,這些結(jié)果在構(gòu)建外部無(wú)用懂鸵。在調(diào)用的情況下integration-test,環(huán)境可能處于掛起狀態(tài)行疏。
Jacoco等代碼覆蓋工具以及Tomcat匆光,Cargo和Docker等執(zhí)行容器插件將目標(biāo)綁定到該pre-integration-test階段,以準(zhǔn)備集成測(cè)試容器環(huán)境酿联。這些插件還將目標(biāo)綁定到post-integration-test階段终息,以收集覆蓋率統(tǒng)計(jì)信息或停用集成測(cè)試容器。
Failsafe and code coverage plugins綁定目標(biāo)贞让,integration-test和verify階段周崭。verify階段結(jié)束后即可獲得覆蓋率報(bào)告。如果integration-test要從命令行調(diào)用震桶,則不會(huì)生成報(bào)告休傍。集成測(cè)試容器環(huán)境處于掛起狀態(tài);Tomcat Web服務(wù)器或Docker實(shí)例保持運(yùn)行狀態(tài)蹲姐,并且Maven甚至無(wú)法自行終止。
package
最常見(jiàn)的方法是通過(guò)同名的POM元素為項(xiàng)目設(shè)置包裝<packaging>人柿。一些有效的package是jar柴墩,war,ear和pom凫岖。如果未指定包裝值江咳,則默認(rèn)為jar。
每個(gè)包裝都包含要綁定到特定階段的目標(biāo)列表哥放。例如歼指,jar打包將綁定以下目標(biāo)以構(gòu)建默認(rèn)生命周期的各個(gè)階段。
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
Maven構(gòu)建所有的phase甥雕,
validate: 驗(yàn)證項(xiàng)目正確無(wú)誤踩身,并提供所有必要的信息。
initialize :初始化構(gòu)建狀態(tài)社露,例如設(shè)置屬性或創(chuàng)建目錄挟阻。
generate-sources: 生成任何要包含在編譯中的源代碼。
process-sources:處理源代碼,例如過(guò)濾任何值附鸽。
generate-resources:生成資源以包含在包中脱拼。
process-resources: 將資源復(fù)制并處理到目標(biāo)目錄中,以備打包坷备。
compile:編譯項(xiàng)目的源代碼熄浓。
process-classes:對(duì)編譯后生成的文件進(jìn)行后處理,例如對(duì)Java類進(jìn)行字節(jié)碼增強(qiáng)省撑。
generate-test-sources:生成任何測(cè)試源代碼以包含在編譯中赌蔑。
process-test-sources:處理測(cè)試源代碼,例如過(guò)濾所有值丁侄。
generate-test-resources:創(chuàng)建測(cè)試資源惯雳。
process-test-resources:將資源復(fù)制并處理到測(cè)試目標(biāo)目錄中。
test-compile:將測(cè)試源代碼編譯到測(cè)試目標(biāo)目錄中
process-test-classes:對(duì)測(cè)試編譯生成的文件進(jìn)行后處理鸿摇,例如對(duì)Java類進(jìn)行字節(jié)碼增強(qiáng)石景。
test:使用合適的單元測(cè)試框架運(yùn)行測(cè)試。這些測(cè)試不應(yīng)要求打包或部署代碼拙吉。
prepare-package:在實(shí)際包裝之前執(zhí)行準(zhǔn)備包裝所需的任何操作潮孽。這通常會(huì)導(dǎo)致包裝的未包裝,已處理版本筷黔。
package:獲取編譯后的代碼往史,并將其打包為可分發(fā)格式,例如JAR佛舱。
pre-integration-test:在執(zhí)行集成測(cè)試之前執(zhí)行所需的操作椎例。這可能涉及諸如設(shè)置所需環(huán)境的事情。
integration-test:處理該程序包请祖,并在必要時(shí)將其部署到可以運(yùn)行集成測(cè)試的環(huán)境中订歪。
post-integration-test:在執(zhí)行集成測(cè)試后執(zhí)行所需的操作。這可能包括清理環(huán)境肆捕。
verify:運(yùn)行任何檢查以確認(rèn)包裝有效并符合質(zhì)量標(biāo)準(zhǔn)刷晋。
install:將軟件包安裝到本地存儲(chǔ)庫(kù)中,以作為本地其他項(xiàng)目中的依賴項(xiàng)慎陵。
deploy:在集成或發(fā)行環(huán)境中完成后眼虱,將最終程序包復(fù)制到遠(yuǎn)程存儲(chǔ)庫(kù),以便與其他開發(fā)人員和項(xiàng)目共享席纽。