mvn dependency:tree的用法


一.參考文檔

https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

https://maven.apache.org/plugins/maven-dependency-plugin/examples/filtering-the-dependency-tree.html

https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html

二.查看jar包的間接依賴

1.如果發現某個jar包,自己的pom中並沒有定義,想看一下是被哪個jar包間接引用的,兩種方法

  (1)用mvn dependency:tree>temp/tree.txt,直接輸出到當前項目下,然后在idea中打開,搜索要找的jar包名字即可.

這里的 "+-" 和"\-"並沒有什么意義,只是為了讓分級看起來更直觀

參考:https://stackoverflow.com/questions/34006740/what-is-the-difference-between-and-in-maven-dependency-tree-output 

  如圖,可看到jline是在zookeeper中被間接引用的

 (2)用include參數

 

H:\下載\新建文件夾\yjg>mvn dependency:tree -Dincludes=jline
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effe
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.pl
[WARNING]
[WARNING] It is highly recommended to fix these problems because
[WARNING]
[WARNING] For this reason, future Maven versions might no longer
[WARNING]
[INFO]
[INFO] ---------------------------------------------------------
[INFO] Building esshop Maven Webapp 0.0.1-SNAPSHOT
[INFO] ---------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ essh
[INFO] esshop:esshop:war:0.0.1-SNAPSHOT
[INFO] \- org.apache.zookeeper:zookeeper:jar:3.3.3:compile
[INFO]    \- jline:jline:jar:0.9.94:compile
[INFO] ---------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------------------
[INFO] Total time: 3.256 s
[INFO] Finished at: 2017-12-05T08:57:49+08:00

同樣的結果

2.如果想看沖突和重復的具體情況,用verbose參數

如圖,用了程序顯式定義的版本

H:\下載\新建文件夾\yjg>mvn dependency:tree -Dverbose -Dincludes=commons-collections
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for esshop:esshop:war:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 621,
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building esshop Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ esshop ---
[INFO] esshop:esshop:war:0.0.1-SNAPSHOT
[INFO] +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] +- org.hibernate:hibernate:jar:3.2.2.ga:compile
[INFO] |  \- (commons-collections:commons-collections:jar:2.1.1:compile - omitted for conflict with 3.2.1)
[INFO] +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile
[INFO] |  \- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile
[INFO] |     \- (commons-collections:commons-collections:jar:3.1:compile - omitted for conflict with 3.2.1)
[INFO] +- org.springframework.security:spring-security-core:jar:2.0.4:compile
[INFO] |  \- (commons-collections:commons-collections:jar:3.2:compile - omitted for conflict with 3.2.1)
[INFO] +- org.apache.velocity:velocity:jar:1.5:compile
[INFO] |  \- (commons-collections:commons-collections:jar:3.1:compile - omitted for conflict with 3.2.1)
[INFO] \- net.sf.json-lib:json-lib:jar:jdk15:2.4:compile
[INFO]    \- (commons-collections:commons-collections:jar:3.2.1:compile - omitted for duplicate)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

 三.處理jar包依賴沖突

簡介:處理jar包依賴沖突,首先,對於多個jar包都引用同一jar包的情況,最好是在程序中顯式定義被共同引用的jar包的依賴,來統一版本號,方便維護

如果A和B都依賴同一jar包C,可能會出現兩種情況

1.A和B引用的C版本相同,這時按照pom定義順序選擇第一個即可,沒有沖突問題,如果在項目的maven中顯示定義了C依賴,那么用選擇項目定義的依賴,反正version都一樣,沒有影響

2.A和B依賴的C版本不同,選擇版本高的那個,這時會出現兩種結果

  (1) 高版本兼容低版本,所以不會出現問題

  (2)高版本不兼容低版本,假如A依賴C2版本,B依賴C3版本,C3不兼容C2,maven選擇了高版本C3,對A來說會出現問題

  有3種解決方法

  [1]提升A版本,找到依賴C3的A版本

  [2]如果B版本也可依賴C2,在項目的maven中顯示定義對C2的依賴,這樣所有都使用C2版本

  [3]如果B版本不支持C2版本,只能降低B版本,找到依賴C2的B版本

  從功能性和可維護性考慮,高版本提供的功能更多,bug更少,優先考慮1

  再考慮2

  最后考慮3

 


免責聲明!

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



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