标签:包冲突 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类。
标签:包冲突 dea ast array lib sonar lang 版本 这一
原文地址:https://www.cnblogs.com/fengyingdong/p/11371386.html