我无法在Tomcat7安装上部署Jersey REST服务的WAR。Jersey REST服务的WAR部署失败,但Guava存在
Tomcat在一个Docker容器内运行,目前为止,该容器已经完美运行。
我复制WAR在/var/lib/tomcat7/webapps
和初始化失败抱怨缺少番石榴类:
2016-09-25T13:29:55.444368315Z org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/simple02]]
. . . . .
2016-09-25T13:29:55.444460727Z Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Function
....
2016-09-25T13:29:55.444483641Z at org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer.onStartup(JerseyServletContainerInitializer.java:132)
问题是:既Jersey的容器的servlet.jar(其中包含JerseyServletContainerInitializer)和jersey- guava-2.8.jar(其中包含函数)与WAR中的目录位于同一个lib
目录中。
我的假设是,Tomcat实际上完全忽略了我的lib
目录,并从某个Jersey JAR运行JerseyServletContainerInitializer
。
我不想在一个通用的Tomcat容器的定义中粘贴单个Guava JAR,并且倾向于从我的web.xml
进行操作。
这可能吗?我尝试了几次尝试都没有成功。
战争的结构如下:
/WEB-INF
/classes
/com, etc. etc.
/lib
/javax.ws.rs-api-2.0.jar
/jersey-client.jar
/jersey-common.jar
/jersey-container-servlet.jar
/jersey-container-servlet-core.jar
/jersey-guava-2.8.jar
/jersey-server.jar
/web.xml
/META-INF
/MANIFEST.MF
你在代码中调用番石榴吗? –
不,从泽西岛内的番石榴有依赖。关于这个NoClassDefFoundError的很多问题都来自不了解它的人,所以他们被告知要将任何Guava JAR(如jersey-guava-2.8.jar)放入类路径中,问题就解决了。在我看来,事情并不那么简单。 –
我使用Wildfly容器时发生了完全相同的错误。现在我正在尝试用Jetty容器,希望Jetty的袖子里已经有了Guava。 –