WAR Jersey REST 服务部署失败,但 Guava 在那里
WAR for Jersey REST Service fails deployment, but Guava is there
我无法在 Tomcat7 安装上部署 Jersey REST 服务的 WAR。
Tomcat 在 Docker 容器内运行,到目前为止运行良好。
我将 WAR 复制到 /var/lib/tomcat7/webapps
中,但初始化失败并抱怨缺少 Guava class:
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-container-servlet.jar(包含 JerseyServletContainerInitializer)和 jersey-guava-2.8.jar (其中包含函数)在 WAR.
中的同一 lib
目录中
我的假设是 Tomcat 实际上完全忽略了我的 lib
目录和 运行 来自它自己的某个 Jersey JAR 的 JerseyServletContainerInitializer
。
我不想在通用 Tomcat 容器的定义中加入一个 Guava JAR,我更愿意从我的 web.xml
.
进行操作
这可能吗?我试了几次都没有成功。
WAR 的结构如下:
/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
Jersey-guava-2.8 是 guava 重新打包为 jersey 内部依赖,但仅在 jersey 2.6.x 版本后才添加为内部依赖。当 jersey 依赖于 Guava 时,您拥有的版本 jersey-container-servlet.jar 是在 2.6.x 之前。因此,解决方法是使用最新的 jersey-container-servlet.jar 和所有其他依赖项,或者至少使用 2.6.x.
之后的版本
我无法在 Tomcat7 安装上部署 Jersey REST 服务的 WAR。
Tomcat 在 Docker 容器内运行,到目前为止运行良好。
我将 WAR 复制到 /var/lib/tomcat7/webapps
中,但初始化失败并抱怨缺少 Guava class:
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-container-servlet.jar(包含 JerseyServletContainerInitializer)和 jersey-guava-2.8.jar (其中包含函数)在 WAR.
中的同一lib
目录中
我的假设是 Tomcat 实际上完全忽略了我的 lib
目录和 运行 来自它自己的某个 Jersey JAR 的 JerseyServletContainerInitializer
。
我不想在通用 Tomcat 容器的定义中加入一个 Guava JAR,我更愿意从我的 web.xml
.
这可能吗?我试了几次都没有成功。
WAR 的结构如下:
/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
Jersey-guava-2.8 是 guava 重新打包为 jersey 内部依赖,但仅在 jersey 2.6.x 版本后才添加为内部依赖。当 jersey 依赖于 Guava 时,您拥有的版本 jersey-container-servlet.jar 是在 2.6.x 之前。因此,解决方法是使用最新的 jersey-container-servlet.jar 和所有其他依赖项,或者至少使用 2.6.x.
之后的版本