NoSuchMethodError异常原因排查和解决原创
6人赞赏了该文章
5636次浏览
编辑于2022年07月20日 09:57:26
问题描述
最近遇到过不少NoSuchMethodError异常,写个文章介绍一下异常原因和解决方案。
下面两个截图都是同一种原因导致的异常,如下
原因分析
以第一张截图为例,
这个问题是由于这里报的异常,这个异常是由于ProviderConfig里面缺少setInstanceId方法导致的。
我分析了一下堆栈和源代码,发现DubboBeanManager里面会调用这个方法
我接着往下找,发现存在两个ProviderConfig类,并且他们的包名都是一样的,不过所在的jar包不一样。
一个在bos-mservice-dubbox-1.0.jar
一个在dubbo-2.8.4.jar
总结
如果加载类的时候加载错了,加载了在dubbo-2.8.4.jar里面的ProviderConfig类,那么就会抛异常,因为这里的ProviderConfig没有setInstanceId方法。
因为DubboBeanManager也在bos-mservice-dubbox-1.0.jar里面,所以按照顺序应该会优先加载dubbox里面的ProviderConfig。
解决方法
(1) 刷新gradle
尝试对gradle脚本进行clean,刷新gradle依赖,对项目进行rebuild。
最终解决了这个问题。
(2)排查依赖顺序,让bos最先被加载。
查看build.gradle,查看dependencies顺序,把bos-mservice-dubbox-1.0.jar所在的bos目录,放在dependencies第一行,让bos下面的jar包最先被项目加载。
注意:修改了build.gradle文件,记得刷新gradle依赖。
推荐阅读