利用maven工具解决jar包冲突问题或重复加载问题

来源:互联网 发布:mac装win7加载驱动程序 编辑:程序博客网 时间:2024/06/05 00:35

在使用maven开发项目的过程中,经常会遇到jar包重复加载或者jar包冲突的问题的,但是由于有些jar是由于maven的依赖加载自动加载进来的,

而不是开发者自己配置的,特别是当项目中pom中配置的jar包依赖本身很多时,开发者靠自己的经验,有时很难找出是哪个jar的加载导致加载了

多余的依赖jar,从而产生冲突。

今天刚好遇到一个借用eclipse中的maven插件解决jar包依赖冲突的问题,分享一下。


项目中出现的问题如下:

Caused by: Java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory

后经网上搜索加边上大牛指点发现:

log4j-over-slf4j.jar 和 slf4j-log4j12.jar 在同一个classpath下就会出现这个错误。

解决方法: 
将slf4j-log4j12.jar从相关的jar中排除

但是查看maven项目中的pom文件,自己并没有配置这个jar的依赖,猜测是maven加载其他jar引入的依赖包。

打开pom.xml文件,在Dependency Hierarchy(依赖列表)中查看jar包的依赖层次关系。



在过滤栏中输入log4j,右侧出现了log4j相关包的依赖结构,左侧则是pom.xml全部依赖包的列表展示。

直接在右侧选中zookeeper底下的slf4j的jar包,右键选择Exclude,然后保存pom.xml。这样在加载zookeeper的jar包时就不会再加载slf4j的jar包。


修改后对应的dependency文件如下:

[html] view plain copy
  1.              <dependency>  
  2.     <groupId>org.apache.zookeeper</groupId>  
  3.     <artifactId>zookeeper</artifactId>  
  4.     <version>3.4.6</version>  
  5.     <exclusions>  
  6.         <exclusion>  
  7.             <artifactId>slf4j-log4j12</artifactId>  
  8.             <groupId>org.slf4j</groupId>  
  9.         </exclusion>  
  10.     </exclusions>  
  11. </dependency>  


这样就能通过filter过滤快速找到对应jar,并知道他的依赖关系,快速解决项目中的jar包冲突问题。
阅读全文
0 0
原创粉丝点击