2

我有一个项目,其中有不同的类和包作为依赖项。请注意,下面写的所有内容都发生在一个项目中。

我有一个在某些时候运行代码的类getDiagramPanel().setRelationsPaintOrder(new Comparator() {

getDiagramPanel()调用方法 from DjtSheet.class,该方法位于依赖项 .jar 文件中。此方法返回DjtDiagramPanel对象。我还有一个DjtDiagramPanel.java文件,它应该覆盖包中的文件并包含方法setRelationsPaintOrder()

在 Java 7 中,这可以正常工作。它正确地调用依赖项中的方法,该方法以覆盖依赖包中的面板类的类的格式返回对象。

然而,在 Java 6 中,依赖包中的面板类被返回,而不是我的项目中的面板类。

java.lang.NoSuchMethodError: com.dlsc.djt.gantt.DjtDiagramPanel.setRelationsPaintOrder(Ljava/util/Comparator;)V

请注意,此消息发生在运行时!编译项目没有错误。

我该如何解决这个问题?

4

1 回答 1

-1

这个问题绝对意味着你在类路径中有问题。我想问题是这个类DjtDiagramPanel是重复的,你有两个不同的版本:一个有方法setRelationsPaintOrder,第二个没有。显然,您针对“好”版本编译代码并针对“坏”版本运行。

发生这种情况时,您可能可以通过在 Eclipse 的项目属性中使用依赖顺序来更改类加载的顺序,但它稍后会失败(在生产中)。因此,您应该找到重复的根本原因。

首先找到同一类的这两个版本。然后找出坏版本是如何到达你的类路径的。它通常是由于 3rd 方依赖关系而发生的。如果您使用的是 maven,您可以使用依赖插件来查找根本原因并使用标签“排除”禁用它。

于 2014-02-10T09:35:18.200 回答