NoClassDefFoundError - 但是,根据verbose:class加载类

时间:2017-09-21 09:09:41

标签: java jvm classloader

在调试我们的产品时,我已经找到了NoClassDefFoundError,这对我来说很奇怪 - 我注意到类加载日志的输出(通过打开-verbose:class):

[Loaded com.xxx.yyy.preferences.PreferencesMgr from file:/C:/Users/xxx/.gradle/caches/zzz.jar

PreferencesMgr 只是导致NoClassDefFoundError的类:

java.lang.NoClassDefFoundError: Could not initialize class com.xxx.yyy.preferences.PreferencesMgr

所以似乎jvm实际上已经成功加载了这个类。那为什么会有NoClassDefFoundError?有什么可能性?

2 个答案:

答案 0 :(得分:0)

可能是依赖问题,另一个包也可能定义一个导致冲突的PreferenceMgr类。使用Gradle,您可以使用一些命令来检查依赖项:Check this post

答案 1 :(得分:0)

现在情况很清楚。 PreferenceMgr 依赖于另一个在某些版本中有bug的jar。在gradle中,我们设置了jar的bug版本。因此,在加载PreferenceMgr时,类加载器会对MAUtils中的错误进行分类并导致 NoClassDefFoundError