我在Tomcat 7中部署了一个Java Web应用程序,我有例外情况如下:
Sep 29, 2015 1:36:56 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [arms-api] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/objenesis/Objenesis] with root cause
java.lang.ClassNotFoundException: org.objenesis.Objenesis
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at ch.lambdaj.proxy.ProxyUtil.createProxy(ProxyUtil.java:52)
at ch.lambdaj.proxy.ProxyUtil.createIterableProxy(ProxyUtil.java:76)
at ch.lambdaj.function.aggregate.ProxyAggregator.createProxyAggregator(ProxyAggregator.java:49)
at ch.lambdaj.Lambda.aggregateFrom(Lambda.java:573)
at ch.lambdaj.Lambda.aggregateFrom(Lambda.java:556)
at ch.lambdaj.Lambda.joinFrom(Lambda.java:902)
我的代码是从lambdaj-2.4.jar调用joinFrom。看起来jar不在类路径中。
但是我检查了tomcat,jar在/opt/apache-tomcat-7.0.42/webapps/ROOT/WEB-INF/lib文件夹下。
我尝试设置JMX来监控这个tomcat服务器。那么,有什么方法可以确认这个jar已加载到服务器中了吗?我在MBenas搜索,但没有运气。
答案 0 :(得分:0)
您是否使用maven或其他解决方案进行依赖关系管理?如果不是,您应该尝试使用它,因为在您的情况下,lambdaj库具有它自己的依赖项。例如,查看maven repo。这取决于Objenesis库和一些更多的库。如果你想使用LambdaJ,你也必须提供它们。而这个没有找到的班级来自Objenesis图书馆。
<强>更新强> 您可以使用一些非服务器特定的工具来获取JVM类的所有内容,例如jmap:
jmap -histo <PID>
要获取所有已加载类的列表,或者可以尝试使用jvisualvm。