博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用dependency:tree查看maven引入jar包的传递依赖
阅读量:4693 次
发布时间:2019-06-09

本文共 2113 字,大约阅读时间需要 7 分钟。

maven项目的pom.xml文件给项目导入了不同的jar包,有时候不同的dependency会引入同一个jar包的不同版本。

当不同版本的jar包被依赖后,可能会出现:

 

  1. 冲突。
  2. 有的版本的jar包不会被classloader引入,而有的代码确实需要那个没有被引入的jar包,进而出现错误。

 

在pom.xml文件的目录下使用mvn dependency:tree命令可以查看jar包的传递依赖。

使用-Dverbose 参数可以列出更详细的信息。

mvn -Dverbose dependency:tree

例如 打开项目所在的目录 输入  mvn -Dverbose dependency:tree > test.txt

 

从命令运行的输出内容来看,该命令执行的时候会重新build一次。

如果节选输出内容的其中一部分,可能是这样的:

 

[javascript] 
 
 
  1. [INFO] +- org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile  
  2. [INFO] +- org.apache.tomcat:tomcat-jsp-api:jar:7.0.70:compile  
  3. [INFO] |  +- org.apache.tomcat:tomcat-el-api:jar:7.0.70:compile  
  4. [INFO] |  \- (org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile - omitted for duplicate)  
  5. [INFO] +- net.sf.jasperreports:jasperreports:jar:5.6.0:compile  
  6. [INFO] |  +- (commons-beanutils:commons-beanutils:jar:1.8.0:compile - omitted for conflict with 1.8.3)  
  7. [INFO] |  +- commons-collections:commons-collections:jar:3.2.1:compile  
  8. [INFO] |  +- commons-digester:commons-digester:jar:2.1:compile  
  9. [INFO] |  |  +- (commons-beanutils:commons-beanutils:jar:1.8.3:compile - omitted for duplicate)  
  10. [INFO] |  |  \- (commons-logging:commons-logging:jar:1.1.1:compile - omitted for duplicate)  

 

递归依赖的关系列的算是比较清楚了,每行都是一个jar包,根据缩进可以看到依赖的关系。

 

  • 最后写着compile的就是编译成功的。
  • 最后写着omitted for duplicate的就是有jar包被重复依赖了,但是jar包的版本是一样的。
  • 最后写着omitted for conflict with xxxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。比如上面有一行最后写着omitted for conflict with 1.8.3,那么该行的commons-beanutils:jar:1.8.0不会被引入,只有1.8.3版本的会被引入。

 

解决重复依赖和冲突的方法:

1,修改pom文件中两个dependency元素的位置。如果两个dependency都引用了一个jar包,但是版本不同,classloader只会加载jar包在pom文件中出现的第一个版本,以后出现的其他版本的jar包会被忽略。

不建议使用该方法,因为引用不同版本的jar包本身就是很危险的。

2,使用<exclusions>标签来去掉某个dependency依赖中的某一个jar包或一堆jar包,<exclusion>中的jar包或者依赖的相关jar包都会被忽略,从而在两个dependency都依赖某个jar包时,可以保证只使用其中的一个。

可以这么写:

[html] 
 
 
    1. <dependency>  
    2.     <groupId>com.alibaba</groupId>  
    3.     <artifactId>dubbo</artifactId>  
    4.     <version>2.8.3.2</version>  
    5.     <exclusions>  
    6.         <exclusion>  
    7.             <artifactId>guava</artifactId>  
    8.             <groupId>com.google.guava</groupId>  
    9.         </exclusion>  
    10.         <exclusion>  
    11.             <artifactId>spring</artifactId>  
    12.             <groupId>org.springframework</groupId>  
    13.         </exclusion>    
    14.     </exclusions>  
    15. </dependency>  

转载于:https://www.cnblogs.com/xiaolei2017/p/7874523.html

你可能感兴趣的文章