**
java.lang.NoSuchMethodError: xxx.setXxx(I)V
**
项目一直运行得很正常,突然有一天有报错了,查看日志:
查看报错的代码,发现并没有异常之处,同样的请求在开发环境中顺畅无阻。
然后面向百度编程:查了很多文章都没有找到自己想要的结果,总结大致就以下几种情况:
1、jar包冲突?
排查后第一时间确认不是
2、开发环境和生产环境不一致?
再次确认生产环境和开发环境都是一致的,由于上一次是其它同事更新的,询问后大家使用的版本及编译的版本都是一致的。
3、看问题说明就是 setMoney 这个方法找不到。难不成使用了lombok,idea没编译成功?
拿回生产环境的class文件进行反编译发现有 setMoney 这个方法。
4、难不成真的是方法签名的问题?但是开发环境没问题啊。试试看吧!
于是分别打印了
生产环境class文件的方法签名:
(root> javap -s xxx.class)
开发环境class文件的方法签名:
没错:它们不一样!!! 真特么是方法签名的问题:
最后重新编译覆盖class文件,问题得到解决!
恍惚间想起昨天更新的时候只更新了调用方的class类文件,而 setMoney(Integer)
改成了 setMoney(int) 并没有更新。
自以为Integer也能接受 int 参数,就懒得去更新。结果就出现了上面的情况。
最后:只能怪自己太渣!