NoClassDefFoundError - 但是,class 根据 verbose:class 加载
NoClassDefFoundError - However, class loaded according to verbose:class
在调试我们的产品时,我已经发现了一个 NoClassDefFoundError,这对我来说很奇怪 - 我注意到 class 加载日志的以下输出(通过打开 -verbose:class):
[Loaded com.xxx.yyy.preferences.PreferencesMgr from file:/C:/Users/xxx/.gradle/caches/zzz.jar
PreferencesMgr 只是导致 NoClassDefFoundError:
的 class
java.lang.NoClassDefFoundError: Could not initialize class com.xxx.yyy.preferences.PreferencesMgr
看来jvm实际上已经成功加载了class。那为什么会出现NoClassDefFoundError呢?有哪些可能性?
可能是依赖性问题,另一个包也可能定义了 PreferenceMgr Class,这会导致冲突。使用Gradle,你可以使用一些命令来检查依赖关系:Check this post
现在一切都清楚了。
PreferenceMgr 依赖于另一个在某些版本中有错误的 jar。在gradle中,我们设置了jar的bug版本。因此,当加载 PreferenceMgr 时,类加载器会触发 MAUtils 中的错误并导致 NoClassDefFoundError.
在调试我们的产品时,我已经发现了一个 NoClassDefFoundError,这对我来说很奇怪 - 我注意到 class 加载日志的以下输出(通过打开 -verbose:class):
[Loaded com.xxx.yyy.preferences.PreferencesMgr from file:/C:/Users/xxx/.gradle/caches/zzz.jar
PreferencesMgr 只是导致 NoClassDefFoundError:
的 classjava.lang.NoClassDefFoundError: Could not initialize class com.xxx.yyy.preferences.PreferencesMgr
看来jvm实际上已经成功加载了class。那为什么会出现NoClassDefFoundError呢?有哪些可能性?
可能是依赖性问题,另一个包也可能定义了 PreferenceMgr Class,这会导致冲突。使用Gradle,你可以使用一些命令来检查依赖关系:Check this post
现在一切都清楚了。 PreferenceMgr 依赖于另一个在某些版本中有错误的 jar。在gradle中,我们设置了jar的bug版本。因此,当加载 PreferenceMgr 时,类加载器会触发 MAUtils 中的错误并导致 NoClassDefFoundError.