我無法在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。 –