Java NoSuchMethodError同名类

时间:2013-10-20 17:25:48

标签: java eclipse jar nosuchmethoderror

我在两个不同的.jar文件中有两个同名和相同包的.class文件

第一个罐子:
enter image description here

第二个罐子:
enter image description here

当我从eclipse运行程序时我没有问题,eclipse使用第一个.class文件(我必须使用第一个.class,我不需要第二个.class,我想要排除它。)

当我导出runnable .jar时,我看到它执行了第二个.class文件然后我有了 NoSuchMethodError异常,因为第二个.class与第一个.class不同。

我如何始终使用第一个.class并排除第二个? 我不需要第二个.class,但我需要他的库中的其他类。

2 个答案:

答案 0 :(得分:1)

Java从类路径加载类,这些类是在eclipse中运行应用程序时动态定义的,并由位于jar文件中Class-Path下的文件MANIFEST.MF中的属性META-INF控制。

因此,首先使用任何ZIP工具打开jar文件,然后查看清单。尝试将jar文件的顺序更改为清单并再次运行。我希望这将有所帮助。

但是这是非常糟糕的,您的alive-matchmarker.jar包含不应包含的文件。我不知道它是什么库但是它们有可能有其他不包含自己的依赖项的发行版吗?或者可能试图找到这个库的其他版本。更糟糕的是,如果在类路径中有相同类的不同版本:由于这种重复,应用程序的行为可能会出错并且不可预测,因为您永远不会知道现在使用的是什么类的类。

答案 1 :(得分:0)

不要像

那样导入整个包
import org.mindswap.*;

您可以从任何特定包中导入您想要的特定类,例如

import org.mindswap.wsdl.WSDLTranslator;