關於maven的規則插件:Maven Enforcer plugin;可自定義規則


Maven提供了Maven-Enforcer-Plugin插件,用來校驗約定遵守情況(或者說校驗開發環境)。比如JDK的版本,Maven的版本,開發環境(Linux,Windows等),依賴jar包的版本等等

看有些文章說,這個插件檢查的是maven最終使用的版本情況,我不認同,因為這個插件有個設置是:是否檢查傳遞依賴

如果不設置,就有可能失去對屬於間接依賴的插件的檢查(假如這個依賴插件只出現在間接依賴里)如果設置了,就會檢查傳遞性依賴,如果傳遞性依賴不滿足條件也會導致項目編譯失敗,這是不合理的,因為maven最終發布的項目jar包里,有可能並包含這個依賴(在處理沖突時去掉:路徑最短原則;第一聲明原則)

另外:這個插件無法處理像 [INFO] |  \- org.springframework:spring-expression:jar:3.2.4.RELEASE:compile 這種后面還帶“RELEASE”信息的

 

我們再來看下mvn的dependency插件的功能:

mvn dependency:tree -Dverbose  可以顯示哪些版本因為沖突而被忽略

mvn dependency:copy-dependencies -DoutputDirectory=$WORKSPACE/dependencies可以把項目的所有依賴copy到一個指定的目錄,通過這個目錄,你可以看到項目的所有依賴信息。

你在根目錄(父pom文件位置)執行這條命令,就能看到項目的所有依賴(包括傳遞性依賴);你在子模塊(子pom.xml文件所在目錄)目錄執行這個命令,就能看到子模塊的所有依賴(包括傳遞性依賴),而且是從上圖的信息里可以看到,各個模塊沖突的依賴已經被忽略。

但是它存在的問題是,如果多個子模塊含有一個依賴的多個版本,該如何處理?最終的項目打包會使用哪一個版本呢?

mvn install/mvn deploy 本地安裝或者遠程部署里,只能存在一個版本的依賴

 

內嵌的規則:

http://maven.apache.org/enforcer/enforcer-rules/index.html

自定義規則:

http://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html

 

參考:

1、http://www.cnblogs.com/qyf404/p/4829327.html

2、http://blog.csdn.net/wangjunjun2008/article/details/11599307

3、http://zhwj184.iteye.com/blog/1528627

4、https://oolap.com/2015-10-22-use-maven-enforcer-plugin-check-deps

5、官網:http://maven.apache.org/enforcer/maven-enforcer-plugin/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM