2017-05-12 177 views
0

我正在NoClassDefFoundError的异常的诡异的案子。我的应用程序部署在WebLogic 12c上,并在那里运行了好几个月。在其中一个类中,我正在对JAR中包含的方法进行静态调用,该JAR位于我的托管服务器的类路径中。一切都很好,直到突然之间我开始为那个特定的课程获得“NoClassDefFoundError”。我的JAR没有改变,调用类没有改变,类路径也没有改变。我通过JVisualVM检查了CLASSPATH,并且我的JAR文件在那里。奇怪的NoClassDefFoundError例外

我想知道是否有任何方法来找出它通过Java实用程序或其他工具发生的原因。

+1

如果有一两件事是可以帮助找出问题,这是异常的完整堆栈跟踪。 –

+0

如果你确定你没有意外触及任何东西,那么我会说它看起来像是一个内部的JVM类加载器错误。这里的另一个家伙这个问题,它似乎非常罕见的,难以调试:https://coderanch.com/t/556782/java/Suddenly-java-lang-NoClassDefFoundError –

+0

是的,100%确保没有被改变,验证了好倍。感谢您的参考。 – user7363133

回答

0

如果它已经运行了很长时间,那么包含静态方法和类定义的PermGen内存可能会收集垃圾收集该类定义,以便用其他方法替换它。一旦你尝试调用静态方法,该类将再次被初始化,但是如果在初始化失败的时候(例如,你从一个静态方法中分配一个静态字段的值,最终抛出一个异常),那么这个类将赢得'不要初始化,当你尝试访问它时,你会得到一个NoClassDefFoundError

+0

那么,被管理的服务器正在经常被反弹,至少每周几次,而其他开发者更新其实现。 – user7363133

+0

这可能发生的另一种方式是,如果该类的依赖项未能初始化。即使你不会调用失败的类,由于依赖不存在,它会再次抛出一个'NoClassDefFoundError异常 – Konstantine