java.lang.AbstractMethodError在Eclipse中使用jetty运行webapp.

ste*_*mac 2 java eclipse jetty

我正在研究eclipse中的一个项目,当我使用jetty插件启动时给了我一个

java.lang.AbstractMethodError: 
au.com.mycopmpany.impl.MyClassDAOImpl.findById(Ljava/lang/Integer;)Ljava/lang/Object;.
Run Code Online (Sandbox Code Playgroud)

这个文件在Eclipse中编译得很好,代码正在实现错误所讨论的方法.从我的阅读中,这个错误表明"在运行时"JVM发现一个没有实现此方法的类.

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

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

似乎Eclipse编译器在此类中存在某种错误.我在网上读过一些关于Eclipse编译器中泛型错误的东西(这个类确实使用了Generics)但是这个基类/接口在我们的代码库中反复重复实现,这个类总是有问题.

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

我每次都可以复制此异常,因此如果Eclipse编译器开发人员阅读此内容并且这是一个已知问题,请随时与我联系以获取有关跟踪问题的帮助.

更新:

有问题的类是许多实现GenericDAOGeneric接口定义为的地方之一:

public interface GenericDAO<T, TList> 
Run Code Online (Sandbox Code Playgroud)

有问题的方法是失败的:

public T findById(Integer integer) throws APIException;   
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 6

尝试重建代码.

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

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

检查你的CLASSPATH.也许您认为由JVM加载的impl不是.

如果您认为编译器存在问题,请检查错误列表.

如果您没有在列表中看到错误,请假设您遇到了问题.很多人都喜欢它; 一个严重的错误很久以前就已被发现和修复.

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

假设你是第一个,最后一个,也是永远的问题.

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

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

问题:您是否正在实施IBM的通用DAO