Build Lifecycle

建立生命周期基礎(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)目共享席纽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捏悬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胆筒,更是在濱河造成了極大的恐慌邮破,老刑警劉巖诈豌,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抒和,居然都是意外死亡矫渔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門摧莽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庙洼,“玉大人,你說(shuō)我怎么就攤上這事镊辕∮凸唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵征懈,是天一觀的道長(zhǎng)石咬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卖哎,這世上最難降的妖魔是什么鬼悠? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮亏娜,結(jié)果婚禮上焕窝,老公的妹妹穿的比我還像新娘。我一直安慰自己维贺,他們只是感情好它掂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溯泣,像睡著了一般虐秋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垃沦,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天熟妓,我揣著相機(jī)與錄音,去河邊找鬼栏尚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛只恨,可吹牛的內(nèi)容都是我干的译仗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼官觅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纵菌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起休涤,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咱圆,失蹤者是張志新(化名)和其女友劉穎笛辟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體序苏,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡手幢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忱详。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围来。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匈睁,靈堂內(nèi)的尸體忽然破棺而出监透,到底是詐尸還是另有隱情,我是刑警寧澤航唆,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布胀蛮,位于F島的核電站,受9級(jí)特大地震影響糯钙,放射性物質(zhì)發(fā)生泄漏粪狼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一超营、第九天 我趴在偏房一處隱蔽的房頂上張望鸳玩。 院中可真熱鬧,春花似錦演闭、人聲如沸不跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窝革。三九已至,卻和暖如春吕座,著一層夾襖步出監(jiān)牢的瞬間虐译,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工吴趴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漆诽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓锣枝,卻偏偏與公主長(zhǎng)得像厢拭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撇叁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355