0

在我部署到 Tomcat 的 .war 文件中,我在构建期间存在的库上收到 NoClassDefFoundError。

我的 .war 是使用 Ant 构建脚本创建的。在脚本中,我认为是一个自定义目标(由 office 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 构建 .jar 和 .war。Tomcat 版本 6.0.29。这MyServlet.java:45是第一次调用 .jar 库,但首先调用了另一个库(只是 log4j)。检查webapps文件夹,我看到图书馆就在它应该在的地方。其他人非常相似的 .war (相同的依赖项,类似的代码稀疏)在同一个 Tomcat 上运行得很好,但我一直无法找到相关的区别,除非它是用 Maven 而不是 Ant 构建的,就像库一样曾是。

可能出了什么问题?

4

1 回答 1

3

java.lang.NoClassDefFoundError:无法初始化类 com.myjarlibrary.ConnectionAgent

这并不表示找不到该类本身。它以自己令人困惑的方式说初始化类时出错。您应该查看com.myjarlibrary.ConnectionAgent并查看其超类或任何静态字段或静态初始化程序是否有任何问题。很可能缺少其中一个引用的类或接口。您也可以通过查看日志找到更多详细信息。检查 catalina.out 和 localhost.* 日志是否有其他错误,更不用说您的应用程序可能写入的任何日志。

于 2013-03-12T03:20:04.760 回答