记一次NoSuchMethodError

NoSuchMethodError的就有类找到了,但是方法没有,所以,思路主要有两个

  1. 找错了类,也就是有同名类,一般不会有同名类,出现同名类的场景比较少,这里列举一个.比如guava,和google-collections,两个jar,但是命名空间一样,
    里面有些类重复了,没错,google-collections废弃了,然后guava一直在维护,类加载顺序本身存在不确定性,所以guava用到了google-collections
    类,这样就不行了,这种比较奇怪,定位也很麻烦.那个方法出错了,可以自己写一下,然后debug要进去的时候,ide就会提示你重复,才能定位
  2. 类没找错,但是版本不对,这种比较常见,就是多个lib协同的问题,比如hive用了新的guava,但是你是老版的guava,有这个类,但是没这个方法,所以需要
    妥善处理好类之间的协同关系,这里,springBoot就出现了dependencyManagement,来缓解这个情况

总结下来,就是类有,但是要么重名,要么版本不对,主要分这两个情况需要注意