2

我正在 Eclipse 中开发一个项目,当我使用 jetty 插件启动时,它给了我一个

java.lang.AbstractMethodError: 
au.com.mycopmpany.impl.MyClassDAOImpl.findById(Ljava/lang/Integer;)Ljava/lang/Object;.

该文件在 Eclipse 中编译良好,并且代码正在实现错误所涉及的方法。从我的阅读来看,这个错误表明“在运行时”JVM 找到了一个没有实现这个方法的类。

但我可以向您保证,MyClassDAOImpl最肯定的findById方法是使用正确的签名实现的。

这似乎是 Eclipse 编译器中的一个错误;maven package我可以通过从命令提示符运行然后在 Eclipse 中运行应用程序来解决这个问题。

Eclipse 编译器似乎存在与此类相关的某种错误。我确实在网上阅读了一些关于 Eclipse 编译器中泛型的错误(这个类确实使用泛型)但是这个基类/接口在我们的代码库中一遍又一遍地重新实现,而且这个类总是有问题。

有谁知道解决方法,或者更好的是,解决这个问题?

我每次都可以复制这个异常,所以如果 Eclipse 编译器开发人员读到这个并且这是一个已知问题,请随时与我联系以寻求帮助以追踪问题。

更新:

有问题的类是许多实现GenericDAO通用接口定义为的类之一:

public interface GenericDAO<T, TList> 

有问题的方法是失败的:

public T findById(Integer integer) throws APIException;   
4

7 回答 7

6

尝试重建您的代码。

我猜你有一个 DAO 接口,并且接口和 impl 的签名略有不同,以至于编译器看不到接口完全由具体的 impl 类实现。也许 Eclipse 不同步。

如果这不起作用,请查看 Eclipse 是否允许您从接口方法导航到具体实现。如果不能,那就是加强编译器告诉你的线索。

检查你的类路径。也许您认为 JVM 正在加载的 impl 不是。

如果您认为这是编译器的问题,请查看错误列表。

如果您没有在列表中看到错误,则假设您是问题所在。很多人使用它;很久以前就发现并修复了一个严重的错误。

清理 Jetty 部署 - WAR 和所有临时文件。重建和重新部署。也许 Jetty 保留了 .class 文件的旧版本,这可以解释为什么它可以在命令行上工作,而不是在部署到 Web 时。

假设你首先是问题,最后是问题,而且永远都是。

更新:有没有办法切换 Eclipse 使用的 JDK?你能指出一个 Sun JDK 吗?

这是我讨厌 Eclipse 的另一个原因。如果你的故事属实,我会更高兴成为一名 IntelliJ 用户。

问题:您正在实施IBM 的通用 DAO吗?

于 2009-07-24T00:51:36.600 回答
1

尝试禁用内部编织:(eclipselink.weaving.internal=false在persistence.xml中)

于 2012-06-18T22:08:19.223 回答
0

我知道您已经说过您可以导航代码并且一切正常,但是您是否尝试过在调试时导航?如果您在调用 findById 之前中断然后介入,您会进入您的 Impl 类吗?这可能会给你一些关于可能的类路径混淆的提示......

于 2009-08-04T09:33:03.440 回答
0

你说它使用 Sun 编译器从命令行运行良好,所以我假设 Eclipse 和 Sun 编译器都将它们的类输出到同一个目录中?

我遇到过类似的问题,在同时使用 Eclipse 和 Sun 编译器时保持类文件同步似乎存在问题。Eclipse 使用它自己的内置编译器而不是 Sun 编译器,这将为相同的代码生成不同的类文件(例如,串行版本的 UID 不匹配)。

我发现的最佳解决方案是为 Eclipse 和 Sun 编译器使用单独的 bulid 文件夹。这样,如果您的源始终保持同步,但类文件不能相互冲突。

于 2009-08-06T22:27:34.263 回答
0

看看你的类路径。
接口名称可能在不同包中的类路径中重复;那个eclipse自动导入了错误的包。

当它发生时,我花了很多时间扯掉我的头发/+:

如果您已经有了解决方案,您能否也将其发布在这里?

于 2009-08-07T12:54:17.623 回答
0

@Override 注释有什么帮助吗?如果您可以将其转换为编译时错误,您可能可以获得有关该问题的更多信息。

完全限定相关文件中的相关类名可能也是一个好主意。

于 2009-08-07T20:39:05.933 回答
0

只需清理项目,然后 maven 构建项目。错误消失了。作为
eclipse的初学者,我觉得IDE就像个孩子,要耐心面对不稳定。

于 2013-04-23T10:02:04.867 回答