gpt4 book ai didi

Java 6 运行时不覆盖从 .jar 依赖项中调用的类

转载 作者:行者123 更新时间:2023-11-29 08:53:12 27 4
gpt4 key购买 nike

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

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

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

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

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

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

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

我该如何解决这个问题?

最佳答案

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

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

首先找到同一类的这2个版本。然后找出错误版本是如何到达您的类路径的。它通常是由于 3rd 方依赖性而发生的。如果您使用的是 Maven,则可以使用依赖插件找到根本原因并使用标签“exclusion”将其禁用。

关于Java 6 运行时不覆盖从 .jar 依赖项中调用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com