近期在學(xué)習(xí)java架構(gòu)相關(guān)課程,這里做些筆記滔驾,后期可以回顧用。
maven是每個(gè)程序員開(kāi)發(fā)必備的技能之一俄讹,但是很多時(shí)候都沒(méi)有系統(tǒng)的學(xué)過(guò)maven到底是個(gè)什么東西哆致,我也一樣,在之前的項(xiàng)目中唯一用到的就是pom.xml文件患膛。新建maven項(xiàng)目或者導(dǎo)入一個(gè)maven的工程摊阀,pom文件都是網(wǎng)上復(fù)制粘貼,至于里面到底有些什么踪蹬,每個(gè)標(biāo)簽都是干什么用的完全不知道胞此,現(xiàn)在開(kāi)始,一步步學(xué)習(xí)maven的原理以及更深層的東西延曙,使自己能夠更加熟練的掌握maven的使用豌鹤,并且可以在今后的工作中用到更多的maven相關(guān)的技術(shù)點(diǎn)。
maven有執(zhí)行命令枝缔,比如mvn clean package,mvn clean install,mvn clean deploy等布疙,那么這些命令道理是什么意思蚊惯,maven執(zhí)行的生命周期是什么,他在執(zhí)行的時(shí)候到底做了哪些工作灵临,下面就具體說(shuō)說(shuō)截型。
首先,maven的生命周期有三套儒溉,每套都是獨(dú)立完整的宦焦,分別是clean,default顿涣,site波闹。每套生命周期可以獨(dú)立運(yùn)行,而在每套生命周期中都存在很多的階段涛碑,當(dāng)每套生命周期執(zhí)行的時(shí)候精堕,其中每個(gè)階段順序執(zhí)行,當(dāng)每個(gè)階段完成之后即maven的該生命周期結(jié)束蒲障。而對(duì)應(yīng)每個(gè)階段歹篓,又有很多的插件來(lái)完成具體的功能,用一個(gè)流程表示就是:maven生命周期->phase(階段)->plugin?goal(插件)
下面聊聊每個(gè)生命周期下具體的階段都是什么揉阎。
1/clean生命周期包含的phase如下:
pre-clean:clean之前要做的事? ? ? ? ? ? ? ? ? ?
clean:clean
post-clean:clean之后要做的事
2/default生命周期包含的phase如下:
validate:校驗(yàn)這個(gè)項(xiàng)目的一些配置信息是否正確
initialize:初始化構(gòu)建狀態(tài)庄撮,比如設(shè)置一些屬性,或者創(chuàng)建一些目錄
generate-sources:自動(dòng)生成一些源代碼毙籽,然后包含在項(xiàng)目代碼中一起編譯
process-sources:處理源代碼洞斯,比如做一些占位符的替換
generate-resources:生成資源文件,才是干的時(shí)我說(shuō)的那些事情惧财,主要是去處理各種xml巡扇、properties那種配置文件扭仁,去做一些配置文件里面占位符的替換
process-resources:將資源文件拷貝到目標(biāo)目錄中垮衷,方便后面打包
compile:編譯項(xiàng)目的源代碼
process-classes:處理編譯后的代碼文件,比如對(duì)java class進(jìn)行字節(jié)碼增強(qiáng)
generate-test-sources:自動(dòng)化生成測(cè)試代碼
process-test-sources:處理測(cè)試代碼乖坠,比如過(guò)濾一些占位符
generate-test-resources:生成測(cè)試用的資源文件
process-test-resources:拷貝測(cè)試用的資源文件到目標(biāo)目錄中
test-compile:編譯測(cè)試代碼
process-test-classes:對(duì)編譯后的測(cè)試代碼進(jìn)行處理搀突,比如進(jìn)行字節(jié)碼增強(qiáng)
test:使用單元測(cè)試框架運(yùn)行測(cè)試
prepare-package:在打包之前進(jìn)行準(zhǔn)備工作,比如處理package的版本號(hào)
package:將代碼進(jìn)行打包熊泵,比如jar包
pre-integration-test:在集成測(cè)試之前進(jìn)行準(zhǔn)備工作仰迁,比如建立好需要的環(huán)境
integration-test:將package部署到一個(gè)環(huán)境中以運(yùn)行集成測(cè)試
post-integration-test:在集成測(cè)試之后執(zhí)行一些操作,比如清理測(cè)試環(huán)境
verify:對(duì)package進(jìn)行一些檢查來(lái)確保質(zhì)量過(guò)關(guān)
install:將package安裝到本地倉(cāng)庫(kù)中顽分,這樣開(kāi)發(fā)人員自己在本地就可以使用了
deploy:將package上傳到遠(yuǎn)程倉(cāng)庫(kù)中徐许,這樣公司內(nèi)其他開(kāi)發(fā)人員也可以使用了
3/site生命周期的phase:
pre-site:site之前要做的事
site:site
post-site:site之后要做的事
site-deploy
在maven的三套生命周期中,每個(gè)周期的階段中卒蘸,都默認(rèn)綁定了一些插件雌隅,而在執(zhí)行生命周期的時(shí)候翻默, 會(huì)順序執(zhí)行這些默認(rèn)綁定的插件。
default生命周期的默認(rèn)綁定是:
process-resources? ? ? ????????resources:resources
compile? ? ? ? ? ? ? ? ? ? ? ?????????compiler:compile
process-test-resources? ? ? ?resources:testResources
test-compile? ? ? ? ? ? ? ? ? ? ? ? compiler:testCompile
test? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?surefire:test
package? ? ? ? ? ? ? ? ? ? ? ? ? ? ?jar:jar或者war:war
install? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?install:install
deploy? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?deploy:deploy
site生命周期的默認(rèn)綁定是:
site? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? site:site
site-deploy? ? ? ? ? ? ? ? ? ? ? ? site:deploy
clean生命周期的默認(rèn)
clean? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?clean:clean
類似于resources:resources這種格式恰起,說(shuō)的就是resources這個(gè)plugin的resources goal(resources功能修械,負(fù)責(zé)處理資源文件)
因此,maven執(zhí)行的命令語(yǔ)句比如mvn clean package
clean是指的clean生命周期中的clean phase
package是指的default生命周期中的package phase
此時(shí)就會(huì)執(zhí)行clean生命周期中检盼,在clean?phase之前的所有phase和clean phase肯污,pre clean,clean
同時(shí)會(huì)執(zhí)行default生命周期中吨枉,在package phase之前的所有phase和package phase
當(dāng)然蹦渣,在每套生命周期中,并不是只有上述的一些默認(rèn)綁定插件的phase貌亭,那些沒(méi)有寫(xiě)出來(lái)的是默認(rèn)沒(méi)有綁定的剂桥,在執(zhí)行的時(shí)候仍然會(huì)執(zhí)行,但是由于沒(méi)有綁定插件属提,所以即使執(zhí)行也什么事都不會(huì)做权逗。
而還有一些命令類似mvn dependency:tree,mvn deploy:deploy-file這樣的命令的意思是和直接執(zhí)行phase下對(duì)應(yīng)插件的命令冤议。
比如mvn dependency:tree意思就是直接執(zhí)行dependency插件下的tree這個(gè)goal斟薇。
以上就是maven生命周期的一些學(xué)習(xí)理解,后續(xù)會(huì)持續(xù)更新恕酸。