java.lang.NoClassDefFoundError一段时间后

时间:2014-11-12 07:27:22

标签: java noclassdeffounderror

我在tomcat上运行了一个应用程序(第三方,而不是自编程)。几天后,我遇到java.lang.NoClassDefFoundError错误的情况。重新启动JVM后,它再次正常运行。

可能是什么原因?并不是类加载器在开始时加载所有类吗?

堆栈跟踪:

java.lang.NoClassDefFoundError: com/ibm/cognos/bux/service/atom/provider/cm/AtomUtils
com.ibm.cognos.bux.service.atom.provider.cm.providers.impl.contentmanager.DefaultAtomProvider.createSearchPath(DefaultAtomProvider.java:150)
com.ibm.cognos.bux.service.atom.provider.cm.providers.impl.contentmanager.DefaultAtomProvider.doGet(DefaultAtomProvider.java:185)
com.ibm.cognos.bux.service.atom.provider.cm.providers.BaseAtomProvider.handleRequest(BaseAtomProvider.java:52)
com.ibm.cognos.bux.service.atom.provider.cm.ContentManagerAtomProvider.handleRequest(ContentManagerAtomProvider.java:71)
com.ibm.cognos.bux.service.atom.ModelATOM.handleRequest(ModelATOM.java:232)
com.ibm.cognos.bux.service.atom.ViewATOM.handleRequest(ViewATOM.java:90)
com.ibm.cognos.bux.BUXControllerBaseImpl.mvcHandleRequest(BUXControllerBaseImpl.java:154)
com.ibm.cognos.bux.service.atom.AtomService.handleRequest(AtomService.java:55)
com.ibm.cognos.bux.http.ServiceRequestHelper._executeRequest(ServiceRequestHelper.java:80)
com.ibm.cognos.bux.http.ServiceRequestHelper.executeRequest(ServiceRequestHelper.java:50)
com.ibm.cognos.bux.service.main.ViewDHTMLInputStreamResolver$2.callImpl(ViewDHTMLInputStreamResolver.java:481)
com.ibm.cognos.bux.service.main.ViewDHTMLInputStreamResolver$2.callImpl(ViewDHTMLInputStreamResolver.java:1)
com.ibm.cognos.bux.service.main.BUXCallable.call(BUXCallable.java:34)
java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
java.util.concurrent.FutureTask.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

3 个答案:

答案 0 :(得分:0)

显然,包含类com / ibm / cognos / bux / service / atom / provider / cm / AtomUtils的Jar文件不存在于类路径中,如果没有,则由Tomcat的类加载器加载。

答案 1 :(得分:0)

类加载器不是在开始时加载所有类吗? - 没有

按需加载类。当DefaultAtomProvider.java(第150行)中需要AtomUtils类时,它不可用。

可能是什么原因? - 很可能缺少包含AtomUtils的jar。

答案 2 :(得分:0)

参考Oracle NoClassDefFoundError Documentation

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或作为使用新表达式创建新实例的一部分)并且没有定义,则抛出NoClassDefFoundError可以找到课程。

在编译当前正在执行的类时存在搜索的类定义,但无法再找到该定义。

这里的原因取决于你的构建路径,也许你有同一个jar文件的不同版本?