maven生命周期和插件
生命周期
maven的生命周期有三套,互相獨立。每個生命周期含有不同階段,常用如下
- clean 清理項目
- pre-clean 執行清理前需要完成的工作
- clean 清理上一次構建生成的文件
- post-clean 執行清理后需要完成的工作
- default 構建項目
- validate 驗證項目正確,所有必需的信息都有
- initialize 初始化編譯狀態,例如創建target文件夾
- generate-source
- process-source 主資源文件變量替換,復制至主classpath目錄
- generate-resources
- process-resources
- compile 編譯主源碼至主classpath目錄
- process-classes
- generator-test-sources
- process-test-sources 測試資源文件變量替換,復制至測試classpath目錄
- generate-test-resources
- process-test-resources
- test-compile 編譯測試源碼至測試classpath目錄
- process-test-classes
- test 執行測試case,測試代碼不會被打包
- prepare-package
- package 將編譯好的代碼打包成可發布的格式
- pre-integration-test
- integration-test
- post-integration-test
- verify 核實包是有效合規,達到質量標準
- install 將包安裝到maven本地倉庫
- deploy 將包復制到遠程倉庫
- site 構件站點
- pre-site
- site 生成項目站點文檔
- post-site
- site-deploy 將生成的項目站點發布到服務器上
maven命令可以調用maven的生命周期階段完成構建,不同生命周期無依賴,同一生命周期的階段前后是有依賴的。
example:mvn clean install site
插件
插件目標是插件對應的某一種功能,可以和maven生命周期的階段綁定。
默認綁定
生命周期階段 | 插件目標 |
---|---|
process-resources | maven-resource-plugin:resources |
compile | maven-compiler-plugin:compile |
process-test-resource | maven-resource-plugin:testResources |
test-compile | maven-compile-plugin:testCompile |
test | maven-surefire-plugin:test |
package | maven-jar-plugin:jar |
install | maven-install-plugin:install |
deploy | maven-deploy-plugin:deploy |
自定義綁定
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.4</version><executions><execution><id>attach source</id><phase>verify</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin>
上面的代碼創建了一個自定義的綁定,在verify
階段綁定了maven-source-plugin:jar-no-fork
插件目標。作用是在verify階段生成項目源碼包,調用命令為maven verify
。
插件配置
-
命令行配置
使用-D
參數配置,例如mvn package -Dmaven.test.skip=true
-
pom文件配置
使用<plugin>
標簽內的<configration>
配置,例如<plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin>
上面的代碼配置了compile插件編譯1.8版本的源文件
描述插件
- 官方插件文檔
- Mojo插件文檔
mvn help:describe -Dplugin=groupid:artifactid:version
插件解析機制
maven命令也可以調用maven的插件目標來完成構建。
分析命令
mvn dependency:tree
插件的定位也需要三要素:groupid,artifactid,version。在上述命令中dependency
稱為插件前綴,tree
稱為插件目標。根據插件前綴定位插件坐標。
- 獲取插件meta.xml信息。插件倉庫的默認地址是http://repo1.maven.org/maven2/org/apache/maven/plugins。獲取該目錄下的maven-metadata.xml。
-
查找前綴對應的artifactid為
maven-dependency-plugin
,因為查得到所以確認groupid為org.apache.maven.plugins
,如果查不到則會去配置的其它倉庫重復步驟1,所有配置的倉庫均找不到則報錯。<plugin><name>Apache Maven Dependency Plugin</name><prefix>dependency</prefix><artifactId>maven-dependency-plugin</artifactId> </plugin>
- 確定好插件的groupid和artifactid,根據這兩個信息查找插件的metadata.xml,地址為http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/maven-metadata.xml,版本信息即可確定,maven 3默認使用release版本,所以version為
2.10
-
所以實際執行的命令為
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree