NoSuchMethodError异常原因排查和解决原创
金蝶云社区-吴锐雄
吴锐雄
6人赞赏了该文章 5636次浏览 未经作者许可,禁止转载编辑于2022年07月20日 09:57:26


问题描述

最近遇到过不少NoSuchMethodError异常,写个文章介绍一下异常原因和解决方案。


下面两个截图都是同一种原因导致的异常,如下

image.png

image.png


原因分析

以第一张截图为例,

这个问题是由于这里报的异常,这个异常是由于ProviderConfig里面缺少setInstanceId方法导致的。

image.png


我分析了一下堆栈和源代码,发现DubboBeanManager里面会调用这个方法

image.png


我接着往下找,发现存在两个ProviderConfig类,并且他们的包名都是一样的,不过所在的jar包不一样。

一个在bos-mservice-dubbox-1.0.jar

image.png


一个在dubbo-2.8.4.jar

image.png


总结

如果加载类的时候加载错了,加载了在dubbo-2.8.4.jar里面的ProviderConfig类,那么就会抛异常,因为这里的ProviderConfig没有setInstanceId方法。

因为DubboBeanManager也在bos-mservice-dubbox-1.0.jar里面,所以按照顺序应该会优先加载dubbox里面的ProviderConfig。


解决方法

(1) 刷新gradle

尝试对gradle脚本进行clean,刷新gradle依赖,对项目进行rebuild。

最终解决了这个问题。

image.png

image.png


(2)排查依赖顺序,让bos最先被加载。

查看build.gradle,查看dependencies顺序,把bos-mservice-dubbox-1.0.jar所在的bos目录,放在dependencies第一行,让bos下面的jar包最先被项目加载。

image.png


注意:修改了build.gradle文件,记得刷新gradle依赖。

image.png

赞 6