我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?
当前回答
以上答案解释得很好。再补充一点 如果你正在使用eclipse,使用ctrl+shift+T并输入类的包结构(例如:gateway.smpp.PDUEventListener),你会找到它存在的所有jar /项目。从类路径中删除不必要的jar或将其添加到类路径中。现在它会选择正确的。
其他回答
我在使用Intelij的Gradle项目中遇到了类似的问题。 我通过删除.gradle(见下面的截图)包和重建项目来解决这个问题。 .gradle包
为什么没有人提到依赖冲突?这个常见问题可能与包含不同版本的依赖jar有关。 详细解释及解决方法:https://dzone.com/articles/solving-dependency-conflicts-in-maven
简短的回答;
添加这个maven依赖项;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<rules>
<dependencyConvergence />
</rules>
</configuration>
</plugin>
然后运行这个命令;
mvn enforcer:enforce
也许这就是你面临问题的原因。
对我来说,这里提到的解决办法没有一个是没用的。
将模拟核从3.3.3更新到3.4.3修复了这个问题。
我认为这是由于MockitoAnnotations.initMock()方法在Mockito JUnit 5 version 3中被弃用并被MockitoAnnotations.openMocks()所取代。
另一方面,检查本地Maven Repository并删除可能导致冲突的不必要的jar可能是值得的。但在使用此步骤时,请注意,不要删除手动安装的(或在操作前备份)。
为了我的案子。我必须检查其他参考方法。我需要将各处的方法签名更改为与新更新的方法签名相同。
例如,将特定方法的返回类型从集合更改为数组列表。
大多数时候java.lang.NoSuchMethodError会被编译器捕获,但有时它会在运行时发生。如果此错误在运行时发生,那么惟一的原因可能是类结构的更改使其不兼容。
最佳解释:https://www.journaldev.com/14538/java-lang-nosuchmethoderror
推荐文章
- 将JSON字符串转换为HashMap
- web - inf在Java EE web应用程序中用于什么?
- Java 8: Lambda-Streams,过滤方法与异常
- 将JsonNode转换为POJO
- 如何查看IntelliJ中的编译错误列表?
- Java SimpleDateFormat("yyyy-MM-dd' t ' hh:mm:ss' z '")给出的时区为IST
- 杰克逊克服下划线,支持骆驼案
- List、List<?>, List<T>, List<E>, List<Object>
- 在Java中转换字符串到日历对象
- 在java中使用wait()和notify()的简单场景
- 增强的for循环中的Null检查
- c# vs Java Enum(适合c#新手)
- 如何在不强制转换的情况下将double转换为long ?
- for循环和for-each循环在性能上有区别吗?
- 你如何比较两个版本的字符串在Java?