码迷,mamicode.com
首页 > 编程语言 > 详细

关于jar包冲突

时间:2019-08-30 23:03:21      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:包冲突   dea   ast   array   lib   sonar   lang   版本   这一   

  这次在项目开发中遇到了java.lang.NoSuchMethodError。堆栈信息显示的是JsonArray.toJavaList这个方法,这个方法在别的分支上并不会报错。根据往常的经验,猜测可能是我这个分支新引入的包依赖了旧版本的fastJson包。

     先是在打包运行module的pom中找到传递依赖,mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson。这边显示com.alibaba:fastjson显示的同一个版本。

     其实这一步是没有必要的,因为我之前已经在父pom中申明了com.alibaba:fastjson的版本,所以maven不会错误地选择版本。

     然后在idea搜索了JsonArray这个类,也没有发现其他包中有类全限定名完全一样的JsonArray类。

     看来只能用bebug,用java.lang.Class.getProtectionDomain方法查出了jvm确实加载了其他Jar包下的JsonArray。找到jar包,但是判断不出是哪个依赖,此时可以用maven-enforcer-plugin插件。

     这里也可以在ClassLoader类的loadClass打个条件断点 ,也能找到对应的依赖。

     最后总结一下,jar包冲突情况解决思路如下:

     1、同一个jar包出现了不同的版本,直接在依赖管理中申明版本

     2、如果第一招解决不了的话,可能是同一个类出现在多个不同的jar包中。这个时候在idea中搜索,搜不到就debug ClassLoader类。

     

     

      

关于jar包冲突

标签:包冲突   dea   ast   array   lib   sonar   lang   版本   这一   

原文地址:https://www.cnblogs.com/fengyingdong/p/11371386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!