Java 6运行时未重写从.jar依赖项中调用的类

Java 6运行时未重写从.jar依赖项中调用的类,java,dependencies,java-7,java-6,downgrade,Java,Dependencies,Java 7,Java 6,Downgrade,我有一个以不同类和包作为依赖项的项目。请注意,下面写的所有内容都发生在一个项目中 我有一个类,它在某些时候运行代码getDiagramPanel().setRelationsPaintOrder(新的Comparator(){) getDiagramPanel()调用DjtSheet.class中的方法,该方法位于dependency.jar文件中。此方法返回djdDiagrampanel对象。我还有一个djdDiagrampanel.java文件,该文件应覆盖包中的方法,并包含方法setRel

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

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

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

在Java7中,这很好,它正确地从依赖项调用方法,该方法以类的格式返回对象,该类重写依赖项包中的panelclass

然而,在Java6中,依赖项包中的panelclass将被返回,而不是我的项目中的panelclass

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

请注意,此消息发生在运行时!编译项目时不会出现错误


如何解决这个问题?

这个问题肯定意味着类路径有问题。我猜问题在于类
djdDiagrampanel
是重复的,并且有两种不同的准确性:一种是方法
setRelationsPaintOrder
,另一种是没有。显然,您是根据“好”编译代码的版本,并针对“坏”版本运行

当这种情况发生时,您可能可以通过在eclipse的项目属性中处理依赖项的顺序来更改类加载的顺序,但它稍后(在生产中)就会失败


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

这个问题肯定意味着类路径有问题。我猜问题在于类
djdDiagrampanel
是重复的,并且有两种不同的含义:一种是方法
setRelationsPaintOrder
的,另一种是没有。显然,您是根据“好”来编译代码的版本,并针对“坏”版本运行

当这种情况发生时,您可能可以通过在eclipse的项目属性中处理依赖项的顺序来更改类加载的顺序,但它稍后(在生产中)就会失败


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

您在运行时和编译时拥有不同版本的jar。请检查运行时类路径。您如何运行应用程序?您是否使用脚本或某种运行框架?@Kayaman Eclipse向我展示了
Java编译器
设置被设置为
JavaSE-1.6
。我通过stting
maven编译器插件来确保这一点在我的pom.xml中de>到
1.6
。在调试配置中,JRE也是se到
JavaSE-1.6
(jre6)(我必须承认我还没有做后者,尽管我认为我做了,但不幸的是错误仍然存在)@Joetjah没关系。你在编译时没有问题,所以maven设置是正确的。当你运行程序时,你使用的jar版本是错误的。@AlexR我使用Eclipse编译和运行项目。你在运行时和编译时有不同版本的jar。检查运行时类路径。你如何运行你的应用程序?你使用脚本还是某种运行框架?@Kayaman Eclipse向我展示了
Java编译器
设置被设置为
JavaSE-1.6
。我已经通过在我的pom.xml中将
maven编译器插件
设置为
1.6
,确保了这一点。在调试配置中,JRE设置为
JavaSE-1.6
(jre6)同样(我必须承认我还没有做过后者,尽管我认为我做过,但不幸的是错误依然存在)@Joetjah这没关系。你在编译时没有问题,所以maven设置是可以的。当你运行程序时,你使用的jar版本是错误的。@AlexR我使用Eclipse编译和运行项目。谢谢你的输入。没错,我有两个不同的版本。一个位于我使用的依赖项中来自第三方发布者,我的项目中的另一个。我需要我项目中的一个来覆盖依赖项中的一个。这在Java 7中似乎有效,但在Java 6中运行时不起作用。你说的“查找根本原因”到底是什么意思?我不相信我可以排除依赖项中的特定类,可以吗?谢谢你的输入。这是正确的ct我有两个不同的版本。一个位于我从第三方发行商使用的依赖项中,另一个位于我的项目中。我需要我的项目中的一个覆盖依赖项中的一个。这在Java 7中似乎有效,但在Java 6中运行时无效。你说的“查找根本原因”到底是什么意思?我不相信我可以排除它依赖项中的特定类,可以吗?