【发布时间】:2015-02-27 13:12:03
【问题描述】:
我有一个有很多依赖项的项目,并且在我的代码的某个地方我正在实现一个类,如下所示:
public class MyApp extends org.some.BaseClass
问题是,提供基类org.some.BaseClass 的依赖项中有多个jar,其中一些包含我需要实现的特定抽象方法,其他则没有。显然,编译器想要使用我不想实现的那些基类之一,但它失败了:
[ERROR] MyApp is not abstract and does not override abstract method getSome() in org.some.BaseClass
现在,从这里:Find where java class is loaded from 我了解了 jvm opt -verbose:class,它列出了所有正在加载的类以及从何处加载它们。出于分析目的,这似乎非常好。但是,我猜由于当时编译器仍在工作并且类尚未完全加载,因此org.some.BaseClass 的源代码不会打印在输出中。编译器只是失败并且没有提及任何细节。
那么,我怎样才能在编译时找出正在编译的类呢?对于有编译错误的文件,是否还有另一个 jvm 标志可以打印与 verbose:class 相同的信息?
更新:
通过在 javac 参数中添加 -verbose 解决。原来错误的类来自一个阴影 jar,该 jar 直接包含其依赖项中的所有类。 IDE 无法告诉我这一点,因为该 jar 也是作为模块的项目的一部分。
【问题讨论】:
标签: java compilation compiler-errors