NoSuchMethodError的bug修复
记一次NoSuchMethodError
NoSuchMethodError
的就有类找到了,但是方法没有,所以,思路主要有两个
- 找错了类,也就是有同名类,一般不会有同名类,出现同名类的场景比较少,这里列举一个.比如
guava
,和google-collections
,两个jar,但是命名空间一样,
里面有些类重复了,没错,google-collections
废弃了,然后guava
一直在维护,类加载顺序本身存在不确定性,所以guava
用到了google-collections
的
类,这样就不行了,这种比较奇怪,定位也很麻烦.那个方法出错了,可以自己写一下,然后debug要进去的时候,ide就会提示你重复,才能定位 - 类没找错,但是版本不对,这种比较常见,就是多个lib协同的问题,比如
hive
用了新的guava
,但是你是老版的guava
,有这个类,但是没这个方法,所以需要
妥善处理好类之间的协同关系,这里,springBoot
就出现了dependencyManagement
,来缓解这个情况
总结下来,就是类有,但是要么重名,要么版本不对,主要分这两个情况需要注意
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 李嘉图!