我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?


当前回答

如果你在写一个webapp,确保你的容器的全局库目录和你的应用程序中没有冲突的jar版本。你可能不知道类加载器正在使用哪个jar。

如。

" /好/李勃200 mywebapp / WEB-INF /李勃

其他回答

如果你在写一个webapp,确保你的容器的全局库目录和你的应用程序中没有冲突的jar版本。你可能不知道类加载器正在使用哪个jar。

如。

" /好/李勃200 mywebapp / WEB-INF /李勃

这通常是在使用像Apache Ant这样的构建系统时引起的,该构建系统只在java文件比类文件更新时才编译java文件。如果方法签名发生了变化,并且类使用了旧版本,则可能无法正确编译。通常的修复方法是做一个完整的重建(通常是“ant clean”然后“ant”)。

有时,当针对一个库版本进行编译,但针对不同的版本运行时,也会导致这种情况。

我通过重命名一个Junit测试文件在Eclipse中解决了这个问题。 在我的Eclipse工作空间中,我有一个App项目和一个Test项目。 Test项目将App项目作为构建路径上的必需项目。

开始获取NoSuchMethodError。 然后我意识到Test项目中的类与App项目中的类具有相同的名称。

App/  
  src/
     com.example/  
       Projection.java
Test/  
  src/
     com.example/
       Projection.java

在将测试重命名为正确的名称“ProjectionTest.java”后,异常消失了。

NoSuchMethodError:我花了几个小时来修复这个问题,最终通过重命名包名来修复它,清洁和构建…尝试清洁构建首先,如果它不工作尝试重命名类名或包名和清洁构建…它应该被修复。祝你好运。

对我来说,这里提到的解决办法没有一个是没用的。

将模拟核从3.3.3更新到3.4.3修复了这个问题。

我认为这是由于MockitoAnnotations.initMock()方法在Mockito JUnit 5 version 3中被弃用并被MockitoAnnotations.openMocks()所取代。

另一方面,检查本地Maven Repository并删除可能导致冲突的不必要的jar可能是值得的。但在使用此步骤时,请注意,不要删除手动安装的(或在操作前备份)。