问题
上线时发现好多error日志,定睛一看是报警功能的异常,要呵呵。看异常大概是这样:
![](https://img.haomeiwen.com/i1753961/ea7e5a2f8517ecee.png)
怎么可能,其它地方调用这个方法正常,IDEA里显示的代码也是有这个方法的。
解决思路
这个方法真的存在吗?仔细对比方法签名。报错方法签名后面有个V,这个代表方法返回值是void类型。
问题复现
common1、common2、middle、tester分表代表基础包版本1、基础包版本2、对基础包的封装、测试类
基础模块
两个版本差别是一个没有返回值,一个有返回值
![](https://img.haomeiwen.com/i1753961/b99189410792e0f2.png)
![](https://img.haomeiwen.com/i1753961/9d3a9e5d37efdd67.png)
中间包
它引用common1(必须是common1),简单封装一下。
![](https://img.haomeiwen.com/i1753961/d4d35cd120108e3d.png)
测试包
它应用common2和middle,middle把common1排除掉。
![](https://img.haomeiwen.com/i1753961/23b7de882148dbaa.png)
问题分析
![](https://img.haomeiwen.com/i1753961/4f509874c20d7764.png)
看middle中的SendMsg字节码,发现使用Producer的send方法是不带返回值的。
由于tester升级了common1为common2,导致Producer没有那个方法了。
![](https://img.haomeiwen.com/i1753961/3bf58f27208d4627.png)
网友评论