Java 6运行时没有覆盖从.jar内部调用的类

时间:2014-02-10 08:41:45

标签: java dependencies java-7 java-6 downgrade

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

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

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

在Java 7中,这很好用。它从依赖项中正确调用该方法,该方法以类的格式返回对象,该类覆盖依赖包中的panelclass。

然而,在Java 6中,返回依赖包中的panelclass而不是我项目中的panelclass。

  

java.lang.NoSuchMethodError:   com.dlsc.djt.gantt.DjtDiagramPanel.setRelationsPaintOrder(Ljava / UTIL /比较器;)V

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这个问题肯定意味着您在类路径中遇到问题。我想问题是类DjtDiagramPanel是重复的,你有两种不同的版本:一种是方法setRelationsPaintOrder,另一种是方法{{1}}。显然,您针对“好”版本编译代码并针对“坏”版本运行。

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

首先找到同一类的这两个版本。然后找出坏版本如何到达你的类路径。它通常是因为第三方依赖性而发生的。如果你正在使用maven,你可以使用依赖插件找到根本原因并使用标记“排除”禁用它。