一段时间后出现java.lang.NoClassDefFoundError

一段时间后出现java.lang.NoClassDefFoundError,java,noclassdeffounderror,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.provid

我在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)

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

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

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

原因可能是什么很可能是缺少包含原子的罐子。

指:

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或使用新表达式创建新实例的一部分),并且找不到该类的定义,则会引发NoClassDefFoundError

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


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

请添加stacktrace.stacktrace添加,谢谢可能的重复“否”,我不这么认为。重新启动后,将加载类,否则在重新启动后无法执行特定功能。当类在类路径中丢失时,我知道NoClassDefFoundError,如果这是一个问题,我将不会询问。如果有帮助,请尝试引用此项-我清楚地指出,重新启动后,它工作正常。因此,类路径中不可能缺少该类。我也不会问这个问题,因为对于这类问题有1000种答案。但是为什么它在创业后还能工作呢。类必须在那里,否则它将永远无法工作。类在编译时就在那里,所以您可以启动应用程序。但在运行时,类jvm无法找到classImportant,因为“类是按需加载的”,请参阅下面的一些原因