Jersey com.sun.jersey.spi.container.servlet.ServletContainer 使用 MAVEN 时出错

Posted

技术标签:

【中文标题】Jersey com.sun.jersey.spi.container.servlet.ServletContainer 使用 MAVEN 时出错【英文标题】:Jersey com.sun.jersey.spi.container.servlet.ServletContainer error when using MAVEN 【发布时间】:2016-05-15 20:49:03 【问题描述】:

当我尝试使用 Jersey 在 Eclipse 中构建一个简单的测试应用程序时。当我尝试运行我的应用程序时,我得到了这个异常:

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

我已经在 Stack Overflow 上研究了这个问题的答案并验证了这些事情:

确实,缺少的类不再存在于 jersey-server 中。该类现在存在于 jersey-servlet 中(注意“servlet”,而不是“server”)。所以我的 Maven 依赖项现在看起来像这样:

<dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
    </dependency>
</dependencies>

我的 web.xml 看起来像这样

<servlet>
    <servlet-name>jersey-helloworld-serlvet</servlet-name>
    <servlet-class>
                 com.sun.jersey.spi.container.servlet.ServletContainer
            </servlet-class>
    <init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.javacodegeeks.enterprise.rest.jersey</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-helloworld-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

我现在可以在 Eclipse 中查看我的项目,在 Java Resources/Libraries/Maven Dependencies 下我可以看到 jersey-servlet-1.19.jar 文件,在那个 jar 中我可以看到 com.sun.jersey.spi.container .servlet 包,在该包中我可以看到 ServletContainer.class 文件。

所以一切似乎都是正确的,但是当服务器 (apache 7.0) 启动时它找不到明显存在的类。

感谢您的任何建议。

【问题讨论】:

ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer的可能重复 【参考方案1】:

这是 eclipse 设置问题,而不是 Jersey 问题。

来自这个帖子ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

右键单击您的 Eclipse 项目属性 -> 部署程序集 -> 添加 -> Java 构建路径条目 -> Maven 依赖项 -> 完成。

所以 Eclipse 在启动 Apache 时没有使用 maven 依赖项。

【讨论】:

对我来说它突然停止工作,所以我删除了 maven 依赖项并再次添加它来工作。【参考方案2】:

我通过如下改变我的依赖解决了它。

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

这与 maven 库的结构相同。

【讨论】:

【参考方案3】:

Jersey 1 使用 com.sun.jersey,Jersey 2 使用 org.glassfish.jersey,因此例外。

另请注意,以 com.sun.jersey 开头的 init-param 也不会被 Jersey 2 识别。

【讨论】:

以上是关于Jersey com.sun.jersey.spi.container.servlet.ServletContainer 使用 MAVEN 时出错的主要内容,如果未能解决你的问题,请参考以下文章

泽西 java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

spring boot com.sun.jersey.spi.container.servlet.ServletContainer

Jersey 1 @Inject 迁移到 Jersey 2 停止工作

Jersey 框架如何在 REST 中实现 JAX-RS API?

带有球衣的嵌入式 tomcat 上的 java.net.SocketTimeoutException