我在两个不同的 .jar 文件中有两个具有相同名称和相同包的 .class 文件
第一个 jar :
第二个 jar :
当我从 Eclipse 运行程序时,我没有问题,Eclipse 使用第一个 .class 文件(我必须使用第一个 .class,我不需要第二个 .class,我想排除它)。
当我导出可运行的 .jar 时,我看到它执行了第二个 .class 文件,然后我有 NoSuchMethodError 异常,因为第二个 .class 与第一个不同。
如何始终使用第一个 .class 并排除第二个? 我不需要第二个 .class,但我需要他的库中的其他类。
最佳答案
Java 从类路径加载类,该类路径是在 Eclipse 中运行应用程序时动态定义的,并由 jar 文件中 META-INF
下的文件 MANIFEST.MF
中的属性 Class-Path
控制。
因此,首先使用任何 ZIP 工具打开 jar 文件并查看 list 。尝试将jar文件的顺序更改为manifest并再次运行。我希望这个能帮上忙。
但是这是非常糟糕的,因为您的alive-matchmarker.jar
包含它不应该包含的文件。我不知道它是什么库,但他们是否有可能拥有不包含自己的依赖项的其他发行版?或者可能尝试找到该库的其他版本。更糟糕的事情可能是,如果您的类路径中有同一类的不同版本:由于这种重复,您的应用程序的行为可能会出现错误且不可预测,因为您永远无法知道现在使用的是哪个版本的类。
关于Java NoSuchMethodError 相同的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480489/