NoSuchMethodError问题分析

问题

上线时发现好多error日志,定睛一看是报警功能的异常,要呵呵。看异常大概是这样:


image.png

怎么可能,其它地方调用这个方法正常,IDEA里显示的代码也是有这个方法的。

解决思路

这个方法真的存在吗?仔细对比方法签名。报错方法签名后面有个V,这个代表方法返回值是void类型。

问题复现

common1、common2、middle、tester分表代表基础包版本1、基础包版本2、对基础包的封装、测试类

基础模块

两个版本差别是一个没有返回值,一个有返回值


NoSuchMethodError问题分析_第1张图片
image.png
NoSuchMethodError问题分析_第2张图片
image.png

中间包

它引用common1(必须是common1),简单封装一下。


NoSuchMethodError问题分析_第3张图片
image.png

测试包

它应用common2和middle,middle把common1排除掉。


NoSuchMethodError问题分析_第4张图片
image.png

问题分析

NoSuchMethodError问题分析_第5张图片
image.png

看middle中的SendMsg字节码,发现使用Producer的send方法是不带返回值的。

由于tester升级了common1为common2,导致Producer没有那个方法了。


NoSuchMethodError问题分析_第6张图片
image.png

你可能感兴趣的:(NoSuchMethodError问题分析)