java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer

您可能会觉得这是一个重复的问题,但同一题的问题都没有解决我的问题。 我使用Jersey 2.0在Eclipse中创建RESTful Web服务,我使用Tomcat 7.0作为我的服务器,我有以下web.xml

    JAX-RS Servlet org.glassfish.jersey.servlet.ServletContainer  jersey.config.server.provider.packages com.shop.domain  1   JAX-RS Servlet /jaxrs/*   

我有一个名为Hello的简单类:

 @Path("customers") public class Hello { @GET @Produces(MediaType.TEXT_PLAIN) public String getCustomer() { return "hello"; } } 

我有一个名为jersey的泽西岛图书馆:

在此处输入图像描述

每次我运行这个项目时,我都会收到错误

 java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 

有任何想法吗?

等等,你说你有一个名为jersey的泽西岛图书馆,你创建了一个User Library并将其命名为jersey ? 如果是这样,请尝试将您的jersey jar文件复制到WebContent – > WEB-INF – > lib

我想这已经得到了回答,但只是想补充一点。

对于Eclipse中的Web项目,几乎总是建议使用Maven管理依赖项。 使用像m2e这样的Maven插件。 向Maven项目添加依赖项后,它应自动将这些库部署到WEB-INF / lib 。 如果没有(无论出于何种原因),您可以明确地这样做:

  1. Project Explorer中右键单击您的项目
  2. 选择属性
  3. 选择部署程序集
  4. 如果Maven Dependencies不是其中一个条目,则不会自动添加库,因此我们现在将添加它们
  5. 选择添加
  6. 选择Java Build Path Entries
  7. 选择Maven依赖项
  8. 单击完成

这应该将库添加到WEB-INF / lib ,尽管您仍然没有在Project Explorer视图中看到它们。 但是你的ClassNotFoundException现在应该消失了。

虽然以上所有内容都适用(Eclipse不是最可靠的应用程序),但请确保您已仔细检查了maven依赖项。 你应该注意,对于jersey2.19我必须添加这两个maven依赖项:

   org.glassfish.jersey.containers jersey-container-servlet 2.19   org.glassfish.jersey.core jersey-server 2.19  

我在Eclipse中遇到了这个问题。 我的项目设置非常相似 – Jersey 2Tomcat 7 。 我正在从eclipse里面运行tomcat,而且似乎在eclipse的某个地方忘记了如何正确地将库部署到tomcat。

我尝试手动部署我的war文件到tomcat并通过startup.sh启动它并且工作正常,但如果我通过eclipse启动它我得到我的web内容但是Jersey类不存在所以REST API不起作用。 我的登录servlet运行正常,而不是泽西位。 控制台有相同的错误:

 java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer 

在启动时。 所以它必然是eclipse如何将代码部署到tomcat的问题。 我尝试进入eclipse服务器并清除工作目录,没有做任何事情。 (不是因为缺少课程)。

唯一有效的方法是在Eclipse中使用我的Servers配置并删除我的tomcat条目然后创建一个新的。 我做到了,它立即修复了。

我也在观察同样的问题。 我正在使用tomcat8和Maven。 如果我构建动态Web项目并手动添加所有库,项目工作正常,但如果我使用Maven,它会出现以下错误:

 SEVERE: Servlet [Jersey REST Service] in web application [/EmployeeManagement] threw load() exception java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1031) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4914) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5201) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 

我在pom.xml文件中添加了以下maven依赖项:

  org.glassfish.jersey.core jersey-server 2.21   org.glassfish.jersey.containers jersey-container-servlet-core 2.21  

jersey jar文件放在WEB-INF / lib中应该可行。

如果您无法将您的jerseyjar文件放在WEB-INF / lib中 ,请尝试通过您的工作区手动复制粘贴它并重新启动eclipse! 这对我有用。

对我来说,修复是这样做的:

 Right click on Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> Server Runtime -> Apache Tomcat v7.0 -> Finish 

我做的另一个步骤是在Maven中导入东西,但它不是必要的,因为它没有它也运行正常。

但在这里它是否有助于任何人

   javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.2.1-b03 provided  

将servlet jar放在WEB-INF / lib中只是让事情变得更复杂,因为Exception Message变得更加复杂和无关紧要

编辑:哦,还有什么帮助是在你的Maven项目上做一个更新项目。

将Jersey库添加到库下的构建路径

我想补充一点,我有同样的问题,@ Edin的答案有效,但我使用的是IntelliJ 。 所以我想我会为Intellij添加一种方法(对于像我这样的未来人):

  1. 文件
  2. 项目结构
  3. 文物
  4. 你应该有一个以你的项目命名的工件,选择它
  5. 在右侧,您将看到可用元素列表
  6. 选择所有可用元素,右键单击,然后选择将它们添加到WEB-INF / Lib的选项

消息很简单,可以确定Jersey库不在类路径中的根本原因。

你要检查天气的第一件事是你是否有你在pom.xml中定义的jersey依赖项。 如果不是,那么您可以定义依赖项。 如果它已在pom.xml中定义,则忽略在pom.xml中添加依赖项

   org.glassfish.jersey.containers jersey-container-servlet 2.19   org.glassfish.jersey.core jersey-server 2.19