Ответ 1
Подождите, вы сказали, что у вас есть библиотека Джерси под названием jersey
, вы создали User Library
и назовите ее jersey
? Если это так, попробуйте скопировать файлы jersey jar в WebContent → WEB-INF → lib.
Вы можете почувствовать, что это дублированный вопрос, но ни один из вопросов с тем же названием не решает моих проблем. Я использую Джерси 2.0, создавая веб-службу RESTful в Eclipse, я использую Tomcat 7.0 в качестве моего сервера, у меня есть следующий web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.shop.domain</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
</web-app>
У меня есть простой класс 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 почти всегда желательно управлять зависимостями с Maven. Используйте плагин Maven, например, m2e. После добавления зависимости к вашему проекту Maven он должен автоматически развернуть эти библиотеки в WEB-INF/lib. Если это не так (по каким-либо причинам), вы можете сделать это так:
Это должно добавить библиотеки в WEB-INF/lib, хотя вы все равно не увидите их в представлении Project Explorer. Но ваш ClassNotFoundException должен исчезнуть.
В то время как все вышеперечисленное может применяться (Eclipse - не самое надежное приложение), убедитесь, что вы дважды проверили ваши зависимости maven. Следует отметить, что для jersey 2.19 мне пришлось добавить эти 2 зависимости maven:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
У меня возникла проблема с Eclipse. Мой проект, который имеет очень похожую настройку - Jersey 2
, Tomcat 7
. Я запускаю tomcat из внутреннего затмения, и кажется, что где-то по пути затмение вроде забыло, как правильно развернуть библиотеки для tomcat.
Я попытался развернуть мой файл войны вручную в tomcat и запустить его через startup.sh
, и он работал нормально, но если я запустил его через eclipse, я получаю свой веб-контент, но классов Джерси не существует, поэтому API REST Не работай. Мой сервлет серфинга работает отлично, просто не бит трикотажа. Консоль имеет ту же ошибку:
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
при запуске. Поэтому, должно быть, проблема с тем, как eclipse развертывает код для tomcat. Я попытался войти в серверы eclipse и очистить рабочий каталог, ничего не сделал. (не для того, чтобы это было, для отсутствующих классов).
Единственное, что сработало, - это настроить конфигурацию моих серверов в Eclipse и удалить мою запись tomcat, а затем создать новую. Я сделал это, и он сразу исправил его.
Я также наблюдаю ту же проблему. Я использую tomcat8 с Maven. Если я создам динамический веб-проект и добавляю все библиотеки вручную, проект работает нормально, но если я использую 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)
Я добавил следующие maven-зависимости в файле pom.xml:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.21</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.21</version>
</dependency>
Поместите файлы jersey в WEB-INF/lib.
Если вы не можете поместить свои файлы jersey jar в WEB-INF/lib, попробуйте скопировать его в ручную, пройдя свое рабочее пространство и перезагрузив eclipse! Это сработало для меня.
Для меня исправление делало это:
Right click on Project -> Properties -> Java Build Path -> Libraries ->
Add Library... -> Server Runtime -> Apache Tomcat v7.0 -> Finish
Еще один шаг, который я сделал, - это импортировать материал в Maven, но он не был необходим, поскольку он отлично работает без него.
Но вот, если это кому-то помогает
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
размещение сервлетов в WEB-INF/lib просто усложнило ситуацию, поскольку сообщение об исключении стало более сложным и неуместным
EDIT: oh также помогает сделать проект обновления в вашем проекте Maven.
Добавьте библиотеку Jersey в путь сборки в библиотеке
Я хотел бы добавить, у меня была такая же проблема, и ответ @Edin работал, однако я использовал IntelliJ. Поэтому я думал, что добавлю способ сделать это для Intellij (для будущих людей, таких как я):