在我已部署到Tomcat的.war文件中,我在构建期间在那里的库上获得NoClassDefFoundError。
我的.war正在使用Ant构建脚本创建。在脚本中我认为是一个自定义目标(由办公室New Project工具自动创建),它从.m2存储库中的.pom获取我的依赖项,并将它们放在我的WEB-INF / lib文件夹中。其中一个库是我帮助编程的库,并且是在我的机器上使用Maven构建的。由于历史原因,这个新项目需要使用Ant,这就是我这样做的原因。
.war建立得很好。找到所有课程。我将它部署到tomcat,当我运行唯一的servlet命令时,它现在很少但是在我之前构建的.jar中调用了几个类,我得到了这个:
exception
javax.servlet.ServletException: Servlet.init() for servlet InitLDAP threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:619)
root cause
java.lang.NoClassDefFoundError: Could not initialize class com.myjarlibrary.ConnectionAgent
com.mywarservice.MyServlet.init(MyServlet.java:45)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:619)
我不知道为什么。
我正在使用Java 6. Tomcat版本6.0.29构建.jar和.war。 MyServlet.java:45
是第一次调用.jar库,但还有另一个名为first的库(只是log4j)。检查webapps
文件夹,我看到库正好位于应有的位置。其他人非常相似.war(相同的依赖关系,类似的代码稀疏)在同一个Tomcat上运行得很好,但我一直无法找到相关的区别,除非它是用Maven而不是Ant构建的,就像库一样是
可能出现什么问题?
答案 0 :(得分:3)
java.lang.NoClassDefFoundError:无法初始化类com.myjarlibrary.ConnectionAgent
这并不表示找不到类本身。它以自己令人困惑的方式说,初始化类时出错。您应该查看com.myjarlibrary.ConnectionAgent
并查看其超类或任何静态字段或静态初始化程序是否存在任何问题。很可能缺少其中一个引用的类或接口。您也可以通过查看日志找到更多详细信息。检查catalina.out和localhost。* log以查找其他错误,更不用说应用程序可能写入的任何日志。