2016-09-25 55 views
0

我无法在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 
+0

你在代码中调用番石榴吗? –

+0

不,从泽西岛内的番石榴有依赖。关于这个NoClassDefFoundError的很多问题都来自不了解它的人,所以他们被告知要将任何Guava JAR(如jersey-guava-2.8.jar)放入类路径中,问题就解决了。在我看来,事情并不那么简单。 –

+0

我使用Wildfly容器时发生了完全相同的错误。现在我正在尝试用Jetty容器,希望Jetty的袖子里已经有了Guava。 –

回答

1

新泽西番石榴2.8是番石榴重新打包为球衣内部依赖关系,而只是加入作为球衣的2.6.x版本后内部依赖性。当球衣依赖Guava时,您拥有的版本jersey-container-servlet.jar在2.6.x之前。因此,修正将是使用最新的jersey-container-servlet.jar和所有其他依赖项或至少2.6.x版本的版本。

相关问题