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.

之后的版本