2

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

通过IDExxxx.getYYY()表达式评估器进行评估。然后xxxx.getClass().getMethods()我们可以在列表中看到getYYY()方法。我们已经尝试清除所有构建的文件、IDE 输出目录、IDE 缓存、重新启动等,但似乎没有任何帮助。

如果我们针对某些东西进行了编译,但随后在运行时发现了不同的 Jar/类,我会理解会发生 NoSuchMethodError。但这并没有向我解释为什么在运行时调试有问题的行时,我们可以看到该方法在那里,但是越过该行会引发异常。

尝试在另一台机器上重现,但它不会重现。

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

4

2 回答 2

2

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

于 2011-06-22T08:37:24.157 回答
0

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

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

类加载器总是引用类路径上 jar 的第一个版本。

于 2015-09-03T21:35:06.143 回答