在我部署到 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 构建的,就像库一样曾是。
可能出了什么问题?