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 停止工作