2016-09-25 57 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版本的版本。

相關問題