所以,我在eclipse工作,一切都编译并正确运行。但是,在构建服务器的ant下编译时,大量测试失败并出现NoSuchMethodError:
A类实施B
界面B延伸C
C需要方法getSyncID()// int字段的标准getter
A.java包含getSyncID()
A.class包含getSyncID()
然而仍然抛出错误。
有谁知道这怎么可能发生?如何解决它。
答案 0 :(得分:1)
当类文件彼此不同步时会发生这种情况;换句话说,一个被编译成新版本而另一个没有。尝试从头开始清洁和重建。
答案 1 :(得分:0)
当类加载器发现一个类(A)中的方法调用另一个不存在的类(B)中的方法时,会出现问题。根本原因是类加载器看到的类B与编译器在编译A时看到的类B不同。
这个问题的最常见原因是@MarkPeters说 - 你的“.class”文件与“.java”文件不同步,需要从头开始重新编译。
另一种可能性是,当您尝试运行应用程序时,您在类路径上有一些“.class”文件的旧副本。
但不管怎样,你必须相信类加载器。如果它说该方法不存在,那么它正在加载的特定“.class”文件中没有 ... 。如果该方法似乎存在于“.class”文件中,则表明您正在类路径中加载该文件的不同版本!