tomcat是如何在我的war中无法找到库中的类的?

  • 本文关键字:war tomcat maven tomcat ant
  • 更新时间 :
  • 英文 :


在我部署到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构建的,就像库一样。

出了什么问题?

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

这并不表示没有找到类本身。它用自己令人困惑的方式说初始化类出错了。您应该查看com.myjarlibrary.ConnectionAgent,看看它的超类或任何静态字段或静态初始化项是否有任何问题。最有可能的是,其中一个引用的类或接口丢失了。您也可以通过查看日志找到更多细节。检查卡特琳娜。Out和本地主机。

相关内容

  • 没有找到相关文章

最新更新