生命周期和插件是maven的兩個(gè)核心概念悲关,一次mvn命令的執(zhí)行就對(duì)應(yīng)了一次生命周期。而生命周期是一個(gè)抽象的概念,他的具體實(shí)現(xiàn)都需要插件來(lái)完成鹰贵。
生命周期
maven有三套相互獨(dú)立的生命周期:clean,default和site康嘉。
- clean:目的是清理項(xiàng)目(pre-clean碉输、clean、post-clean)
- default: 目的是構(gòu)建項(xiàng)目(validate亭珍、compile敷钾、test、package肄梨、verify阻荒、install、deploy)
- site:目的是建立項(xiàng)目站點(diǎn) (pre-site众羡、site侨赡、post-site、site-deploy)
生命周期 | 階段(phase) | 內(nèi)置插件: Goal | 說(shuō)明 |
---|---|---|---|
clean | pre-clean | - | 執(zhí)行清理前需要完成的工作 |
clean | clean | maven-clean-plugin:clean | 執(zhí)行清理前需要完成的工作 |
clean | post-clean | - | 執(zhí)行清理后需要完成的工作 |
default | vaildate | - | 驗(yàn)證粱侣,確保當(dāng)前配置和POM內(nèi)容是有效的羊壹,包含對(duì)POM文件樹的驗(yàn)證。 |
default | intianlize | - | 初始化甜害,執(zhí)行構(gòu)建生命周期的主任務(wù)之前的初始化 |
default | generate-sources | - | 生成源碼舶掖,代碼生成器生成后期階段中處理或編譯的源代碼 |
default | proccess-sources | - | 處理源碼,提供解析尔店、修改和轉(zhuǎn)換源碼眨攘。常規(guī)源碼和生成的源碼都可以再這里處理 |
default | generate-resoureces | - | 生成資源主慰,生成非源碼資源,通常包括元數(shù)據(jù)文件和配置文件執(zhí)行清理前需要完成的工作 |
default | process-resources | maven-resources-plugin:resources | 處理資源鲫售,處理非源碼資源共螺,修改、轉(zhuǎn)換和重定位資源都能在這階段發(fā)生 |
default | compile | maven-compiler-plugin:compile | 編譯情竹,編譯源碼藐不。編譯過(guò)的類被放到目標(biāo)目錄樹中 |
default | generate-resoureces | - | 處理類,處理類文件轉(zhuǎn)換和增強(qiáng)步驟秦效。字節(jié)碼交織器和常用工具常在這一階段操作 |
default | generate-test-sources | - | 生成測(cè)試源碼雏蛮,生成要操作的單元測(cè)試代碼 |
default | process-test-sources | - | 處理測(cè)試源碼,在編譯前對(duì)測(cè)試源碼執(zhí)行任何必要的處理阱州。修改挑秉、轉(zhuǎn)換或復(fù)制源代碼 |
default | generate-test-resources | - | 生成測(cè)試資源,生成與測(cè)試相關(guān)的非源碼資源 |
default | process-test-resources | maven-resources-plugin:testResources | 處理測(cè)試資源苔货,處理犀概、轉(zhuǎn)換或重新定位于測(cè)試相關(guān)的資源 |
default | test-compile | maven-compiler-plugin:testCompile | 測(cè)試編譯,編譯單元測(cè)試的源碼 |
default | process-test-classes | - | 處理測(cè)試類夜惭,對(duì)編譯生成文件做后期處理(Maven2.0.5及以上) |
default | test | maven-surefire-plugin:test | 測(cè)試姻灶,運(yùn)行編譯過(guò)的單元測(cè)試并累計(jì)結(jié)果 |
default | prepare-package | - | 執(zhí)行打包前的所有操作(Maven2.1及以上) |
default | package | maven-jar-plugin:jar | 打包,將可執(zhí)行的二進(jìn)制文件打包到一個(gè)分布式歸檔文件中诈茧,如jar或war |
default | pre-integration-test | - | 前集成測(cè)試产喉,準(zhǔn)備集成測(cè)試,將歸檔文件部署到一個(gè)服務(wù)器上執(zhí)行 |
default | integration-test | - | 集成測(cè)試若皱,執(zhí)行真正的集成測(cè)試镊叁,指在一個(gè)受到一定控制的模擬的真實(shí)部署環(huán)境中測(cè)試代碼 |
default | post-integration-test | - | 后集成測(cè)試尘颓,解除集成測(cè)試準(zhǔn)備走触,涉及環(huán)境重置或重新初始化 |
default | verify | - | 檢驗(yàn),檢驗(yàn)可部署歸檔文件的有效性和完整性疤苹,通過(guò)后互广,將安裝該歸檔 |
default | install | maven-install-plugin:install | 安裝,將項(xiàng)目包安裝到本地倉(cāng)庫(kù)卧土,供其他項(xiàng)目依賴 |
default | deploy | maven-deploy-plugin:deploy | 部署惫皱,將項(xiàng)目發(fā)布到遠(yuǎn)程倉(cāng)庫(kù),供其他開發(fā)人員與項(xiàng)目共享 |
site | pre-site | - | 執(zhí)行一些在生成項(xiàng)目站點(diǎn)之前需要完成的工作 |
site | site | maven-site-plugin:site | 生成項(xiàng)目站點(diǎn)文檔 |
site | peo-site | - | 執(zhí)行一些在生成項(xiàng)目站點(diǎn)之后需要完成的工作 |
site | site-deploy | maven-site-plugin:deploy | 將生成的項(xiàng)目站點(diǎn)發(fā)布到服務(wù)器上 |
命令執(zhí)行生命周期
一個(gè)mvn可以可以對(duì)應(yīng)一次生命周期尤莺,但是mvn命令的不同對(duì)應(yīng)了不同的生命周期旅敷。
mvn clean 僅執(zhí)行clean生命周期的pre-clean和clean階段
mvn test 僅執(zhí)行default生命周期的validate、compile颤霎、test階段
mvn clean 執(zhí)行clean生命周期的pre-clean和clean階段以及default生命周期的validate媳谁、compile涂滴、test、package階段
插件
Maven的核心僅定義了抽象的生命周期晴音,具體的任務(wù)是交由插件完成柔纵,插件以獨(dú)立的構(gòu)件形式存在。
一個(gè)插件往往具備多個(gè)功能锤躁,而每個(gè)功能對(duì)應(yīng)著一個(gè)插件目標(biāo)(Goal)搁料。
生命周期的階段和插件目標(biāo)的綁定
為了減少用戶的配置,maven給一些主要的生命周期階段綁定了很多插件的目標(biāo)系羞,maven clean生命周期的clean階段綁定了maven-clean-plugin的clean目標(biāo)郭计,當(dāng)執(zhí)行mvn clean時(shí)就會(huì)調(diào)用maven-clean-plugin的clean目標(biāo),這些都屬于內(nèi)置的綁定椒振。
當(dāng)然用戶可以自己定義綁定拣宏,例如可以將maven-source-plugin的jar-no-fork目標(biāo)(將項(xiàng)目的主代碼打包成jar文件)綁定到default生命周期的verify階段上。
<bulid>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executons>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executons>
</plugin>
</plugins>
</bulid>
執(zhí)行插件目標(biāo)
mvn 插件前綴 : 目標(biāo)(例如:maven-help-plugin插件杠人,help為插件前綴)
可以調(diào)用插件的某個(gè)目標(biāo)來(lái)執(zhí)行某個(gè)任務(wù)