关于jar包冲突

  这次在项目开发中遇到了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类。

     

     

      

猜你喜欢

转载自www.cnblogs.com/fengyingdong/p/11371386.html