clojure.java.api.Clojure的java.lang.NoClassDefFoundError

问题描述 投票:1回答:1

我们在这里遇到了毫无道理的java.lang.NoClassDefFoundError。

<< [same WAR文件在服务器B中完美运行,但在服务器A上抛出java.lang.NoClassDefFoundError。

配置为:

服务器A(引发异常):

OS: NAME="SLES" VERSION="12-SP4" VERSION_ID="12.4" PRETTY_NAME="SUSE Linux Enterprise Server 12 SP4" Apache Tomcat 8.5.49 Oracle Java dk1.8.0_231

服务器B(正常工作):

OS: NAME="Ubuntu" VERSION="16.04.6 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian VERSION_ID="16.04" PRETTY_NAME="Ubuntu 16.04.6 LTS" Apache Tomcat 8.5.37 Oracle Java jdk 1.8.0_201-b09

例外是:

2020-01-27 15:57:27.103 [http-nio-8081-exec-10] ERROR o.g.w.errors.GrailsExceptionResolver - NoClassDefFoundError occurred when processing request: [GET] /server-0.1/cenario/getCenarioJson Could not initialize class clojure.java.api.Clojure. Stacktrace follows: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ... at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure at com.nitryx.brkmopt.util.ClojureHandler.invoke(ClojureHandler.java:176) at com.nitryx.brkmopt.util.ClojureHandler.invoke(ClojureHandler.java:173) at com.nitryx.brkmopt.CenarioService.$tt__getCenarioJson(CenarioService.groovy:35) ...

WAR文件在服务器B上运行完美,但在服务器A上引发异常。

我们检查了tomcat下的〜/ WEB-INF / lib /文件夹,并且存在必需的依赖项(clojure-1.9.0.jar),并且该依赖项是一致的。经过不顾一切的拼搏,我们甚至尝试手动将jar文件替换为较新的jar文件,但该文件不起作用。

来自Why am I getting a NoClassDefFoundError in Java?

java.lang.NoClassDefFoundError此异常表明JVM在其内部类定义数据结构中查找并没有找到类的定义。这与说它不能从类路径加载。通常这个表示我们先前曾尝试从classpath,但由于某种原因失败

请告知!

编辑:完整的堆栈跟踪:(非常感谢clojurians @jumar @alexmiller @ghadi @seancorfield)

2020-02-05 16:00:02.342 [http-nio-8081-exec-10] ERROR o.g.w.errors.GrailsExceptionResolver - NoClassDefFoundError occurred when processing request: [GET] /server-0.1/cenario/getCenarioJson Could not initialize class clojure.java.api.Clojure. Stacktrace follows: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:239) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:215) at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:239) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:215) at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77) at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130) at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure at com.nitryx.brkmopt.util.ClojureHandler.invoke(ClojureHandler.java:176) at com.nitryx.brkmopt.util.ClojureHandler.invoke(ClojureHandler.java:173) at com.nitryx.brkmopt.CenarioService.$tt__getCenarioJson(CenarioService.groovy:35) at grails.melody.plugin.MelodyInterceptorEnhancer$_enhance_closure1$_closure2.doCall(MelodyInterceptorEnhancer.groovy:77) at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91) at grails.melody.plugin.MelodyInterceptorEnhancer$_enhance_closure1$_closure2.doCall(MelodyInterceptorEnhancer.groovy:77) at com.nitryx.brkmopt.CenarioController.getCenarioJson(CenarioController.groovy:20) at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223) at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188) at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ... 18 common frames omitted

clojure ubuntu-16.04 tomcat8 suse clojure-java-interop
1个回答
0
投票
看起来Tomcat 8.5.50在Catalina中包含了一堆回归修复,其中包含资源加载,这可能会影响Clojure源文件的加载。建议降级到与工作版本相同或升级到8.5.50。

https://tomcat.apache.org/tomcat-8.5-doc/changelog.html

© www.soinside.com 2019 - 2024. All rights reserved.