类冲突会导致“java.lang.NoSuchMethodError”吗?

时间:2015-01-05 10:04:27

标签: maven nosuchmethoderror

在我的maven项目中,有两个不同的jar,但包含具有相同包名的相同类。这会导致NoSuchMethodError吗? 我知道如果该方法不存在会导致此错误吗?如果有方法但重复怎么办?

2 个答案:

答案 0 :(得分:0)

当您在类路径上有两个版本的同一个项目并且他们更改了API时,通常会发生这种情况。根据首先查看的JAR,将找到或不找到该方法。

如果两个JAR中都存在该方法,那么它将起作用,但其他方法可能会失败(会有其他差异)。

如果在类路径上多次添加相同的JAR,那么它将始终有效。

解决方案:

  • 始终确保类路径干净。每个完全限定的类名应解析为单个类资源(文件)。
  • 有时,人们会将来自不同项目的类添加到他们的JAR中,以“使它们更易于使用”。如果是这种情况,则使用ZIP工具打开JAR并删除额外的类。如果没有这样的“帮助”,Maven会更好地工作。

答案 1 :(得分:0)

如果存在冲突,并且该方法在两个类中都存在,则错误不会显示,但是在冲突版本之间签名存在差异的常见情况可能会让您感到困惑。我的建议,检查加载的类的签名是否匹配,并正确处理您的排除