jar包版本冲突问题

15 篇文章 1 订阅
2 篇文章 0 订阅
jar包版本冲突问题

特征:NoSuchMethodException/ClassNotFoundException/NoClassDefFoundError/ClassCastException

	
排查:

	1)查看jar包的版本:-XX:+TraceClassLoading 或 -verbose:class
	2)找到冲突的jar包:
		1>idea中Maven Projects视图下,点击工具栏的第9个图标(show dependencies),稍等片刻就会出现一张显示jar包依赖关系的图。
		2>红色的实线表示有冲突(右键Exclude即可解决冲突),红色的虚线表示同一个jar被多次引用的地方。


解决:

	1)在pom中去除不需要的版本<scope>provided</scope>,在打包阶段就尽可能避免掉版本冲突的问题。
	2)如果冲突发生了,则Exclude冲突的jar包即可。
	

举例:

	问题:Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: com.google.common.base.Splitter.splitToList(Ljava/lang/CharSequence;)Ljava/util/List;
	排查:
		-XX:+TraceClassLoading 或 -verbose:class
		排查结果:[Loaded com.google.common.base.Splitter from file:/E:/Tomcat/apache-tomcat-8.0.33/webapps/advertise-management-control/WEB-INF/lib/guava-11.0.2.jar]
		在/apache-tomcat-8.0.33/webapps/ROOT/WEB-INF/lib/下发现有两个guava的jar包:guava-11.0.2.jar 和 guava-19.0.jar
	解决:
		通过idea的show dependencies功能,发现有两个依赖分别引用了guava-11和guava-19,splitToList这个方法是guava-19提供的方法,故我们在引用guava-11的依赖中将guava Exclude后即解决了问题。

		
补充:

	idea中Maven Projects视图下:
		1)点击工具栏的第9个图标(show dependencies),稍等片刻就会出现一张显示jar包依赖关系的图。
		2)红色的实线表示有冲突(右键Exclude即可解决冲突),红色的虚线表示同一个jar被多次引用的地方。
		
		注意:
			1>Exclude冲突的jar包后,需要手动到tomcat的webapps目录下将工程删掉,然后重新部署。否则的话,\webapps\project-name\WEB-INF\lib下很可能还存在(之前下载的)冲突的jar包。
			2>使用mvn dependency:tree 查看jar包之间的依赖关系不太靠谱,故推荐使用idea提供的功能。



		
		

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值