生命周期和插件是maven的兩個(gè)核心概念,一次mvn命令的執(zhí)行就對(duì)應(yīng)了一次生命周期。而生命周期是一個(gè)抽象的概念,他的具體實(shí)現(xiàn)都需要插件來完成。
生命周期
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 | 說明 |
|---|---|---|---|
| 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 | 編譯,編譯源碼。編譯過的類被放到目標(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)行編譯過的單元測(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)可部署歸檔文件的有效性和完整性,通過后,將安裝該歸檔 |
| default | install | maven-install-plugin:install | 安裝,將項(xiàng)目包安裝到本地倉庫,供其他項(xiàng)目依賴 |
| default | deploy | maven-deploy-plugin:deploy | 部署,將項(xiàng)目發(fā)布到遠(yuǎn)程倉庫,供其他開發(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)來執(zhí)行某個(gè)任務(wù)