如何找出在编译时加载哪个类?

时间:2015-02-27 13:12:04

标签: java compilation compiler-errors

我有一个包含大量依赖项的项目,在我的代码中的某个地方,我正在实现一个类,如下所示:

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也是项目的一部分。

1 个答案:

答案 0 :(得分:2)

来自javac手册:

  

-verbose - 详细输出。这包括有关加载的每个类和编译的每个源文件的信息。