我有一个包含大量依赖项的项目,在我的代码中的某个地方,我正在实现一个类,如下所示:
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
?
通过将-verbose
添加到javac args来解决。变成了一个错误的类来自一个阴影jar,它直接包含了依赖项中的所有类。 IDE无法告诉我这个,因为那个jar也是项目的一部分。
答案 0 :(得分:2)
来自javac
手册:
-verbose
- 详细输出。这包括有关加载的每个类和编译的每个源文件的信息。