当思路如泉涌般、很流程的写完一段代码,点击Run看看执行结果的时候,Duang的一下输出了一串“Caused by: java.lang.NoSuchMethodError: xxx/xxx/xxx”,瞬间美好的心情就没了。

左看看又看看,有这个方法!

打开Google根据关键字探索,搜出的结果是jar冲突了,而冲突的jar的类中没有这个方法,导致找不到这个方法。网上有很多各路大神的解决办法,有用开源工具检查的,有输出依赖树结构查找的,用起来都不是很顺手。

总结了一个简单有效的方法,在IDEA中,将报错方法所在类的全类名写出来,例如输出的错误信息是“Caused by: java.lang.NoSuchMethodError: org/json/JSONObject.putOnce”,就在IDEA中输入org.json.JSONObject,然后到这个JSONObject类中查看是否有putOnce方法,一定没有,接着查看这个类所在的jar名称,将它从依赖列表中排除掉。然后,再回到刚刚输入的界面,再次进入JSONObject类,再次查看是否有putOnce方法,如果也没有将它从依赖列表中排除掉,直到找到存在putOnce方法的类,保留这个类即可。

上面说到在IDEA中输入类的全类名,其实就是想找到所在的jar,也可以在IDEA中打印出org.json.JSONObject.class.getProtectionDomain().getCodeSource()的结果,结果即是类所在的jar。