假的NoSuchMethodError

时间:2011-06-22 08:26:32

标签: java nosuchmethoderror

在我们的一个类上使用简单的getter方法得到NoSuchMethodError。奇怪的是我们可以调试代码并在调试器中看到错误(通过跳过相关的行),但是我们也可以使用IDE(IntelliJ IDEA)来查看方法确实存在。

通过IDE表达式求值程序执行xxxx.getYYY()评估。转到xxxx.getClass().getMethods(),我们可以在列表中看到getYYY()方法。我们已经尝试清理所有构建的文件,IDE输出目录,IDE缓存,重新启动等,似乎没有任何帮助。

我理解如果我们针对某些内容进行编译但是在运行时找到了不同的Jar /类,则会发生NoSuchMethodError。但这并没有向我解释为什么在运行时调试到有问题的行时,我们可以看到方法存在,但是跳过该行会抛出异常。

尝试在另一台机器上进行复制但不会重现。

有没有人对这里可能发生的事情有任何见解?

2 个答案:

答案 0 :(得分:2)

很可能您没有在IntelliJ中运行与编辑内容相同的代码版本。我经常遇到这个问题,很多maven项目一次打开,不同版本依赖于我正在编辑的内容。 IntelliJ可能会混淆(或者我对我实际运行的版本感到困惑)

答案 1 :(得分:0)

NoSuchMethodError - 这主要发生在运行时。我遇到了这个错误,原因是我的类路径中的asm和cglib库的版本不兼容。

asm和cglib库被许多框架使用,如hibernate,spring,hadoop,用于运行时字节代码操作。

Classloader始终引用类路径上jar的第一个版本。