关于jar包冲突

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

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

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

     而后在idea搜索了JsonArray这个类,也没有发现其余包中有类全限定名彻底同样的JsonArray类。maven

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

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

     最后总结一下,jar包冲突状况解决思路以下:spa

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

     二、若是第一招解决不了的话,多是同一个类出如今多个不一样的jar包中。这个时候在idea中搜索,搜不到就debug ClassLoader类。debug