开发环境,NoSuchMethodError异常原因排查和解决

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

开发环境,NoSuchMethodError异常原因排查和解决


1 问题描述

  开发环境,苍穹日志出现NoSuchMethodError异常。以下图为例,com.alibaba.dubbo.config.ProviderConfig报错,其setInstanceId方法没有找到。


2 整体思路

(1)根据异常堆栈,找到全限定名(包名+类名)

(2)idea编辑器中,双击shift,全局搜索类文件,查找类冲突的jar包

(3)解决方式:如果确认是类冲突,可以在gradle中,配置加载顺序。java类加载器遵循 首次加载原则,让正确的类被首次加载,即可解决问题。


3 排查流程案例

以上述异常为例,详细排查流程如下

(1)根据上图的调用堆栈可以得知,DubboBeanManager在调用ProviderConfig的setInstanceId方法时,抛出了NoSuchMethodError异常。

(2)查找DubboBeanManager的import,发现引入了com.alibaba.dubbo.config.ProviderConfig这个类


(3)idea编辑器中,双击shift,全局搜索类文件,发现存在两个com.alibaba.dubbo.config.ProviderConfig类,但是所在的jar包不一样。一个在bos-mservice-dubbox-1.0.jar,另一个在dubbo-2.8.4.jar


(4)对比两个ProviderConfig,发现bos-mservice-dubbox-1.0.jar里面的ProviderConfig有setInstanceId方法,而

dubbo-2.8.4.jar里面ProviderConfig则没有


4 原因分析

  在启动苍穹时,优先加载了dubbo-2.8.4.jar,DubboBeanManager在调用时,调用了dubbo-2.8.4.jar里面的ProviderConfig。


5 解决方法

  这种jar包冲突问题,是java开发过程中,比较常见,特别是在依赖的jar包非常多的情况下。

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


(2)修改了build.gradle文件,需要刷新gradle依赖。


(3)重启cosmic



开发环境,NoSuchMethodError异常原因排查和解决

1 问题描述 开发环境,苍穹日志出现NoSuchMethodError异常。以下图为例,com.alibaba.dubbo.config.ProviderConfig报错,其setInstanceI...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息