2014-10-18 4 views
11

Вы можете почувствовать, что это дублированный вопрос, но ни один из вопросов с тем же названием не разрешает мои проблемы. Я использую Джерси 2.0 создания веб-службы RESTful в Eclipse, я использую Tomcat 7.0 в качестве моего сервера, я следующий web.xml:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

<?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"; 
    } 
} 

I есть библиотека Джерси под названием jersey:

enter image description here

Каждый раз, когда я запустил этот проект, я получил ошибку из

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

Любые идеи?

ответ

3

Подождите, вы сказали, что у вас есть библиотека Джерси под названием jersey, вы создали User Library и назовите ее jersey? Если да, попробуйте скопировать файлы jar jar в WebContent -> WEB-INF -> lib.

+0

Я хотел бы воспользоваться рекомендацией, приведенной ниже @Ebin. Используйте Maven. Преобразуйте проект Eclipse в Maven и продолжайте его развивать в Eclipse. Я делаю это какое-то время, и я доволен этим выбором. – Mouse

1

У меня возникла проблема с Eclipse. Мой проект, который имеет очень похожую настройку - Jersey 2, Tomcat 7. Я запускаю tomcat изнутри затмения, и кажется, что где-то по пути затмение вроде забыло, как правильно развернуть библиотеки для tomcat.

Я попытался развернуть мой файл войны вручную в tomcat и запустить его с помощью startup.sh, и он работал нормально, но если я запустил его через eclipse, я получаю свой веб-контент, но классов Джерси не существует, поэтому REST API не работает, т работы. Мой сервлет серфинга работает отлично, просто не бит трикотажа. Консоль имеет ту же ошибку:

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

при запуске. Поэтому, должно быть, проблема с тем, как eclipse развертывает код для tomcat. Я попытался войти в серверы eclipse и очистить рабочий каталог, ничего не сделал. (не для того, чтобы это было, для отсутствующих классов).

Единственное, что сработало, состояло в конфигурации моего сервера в Eclipse и удалении моей записи tomcat, а затем создании новой. Я сделал это, и он сразу исправил это.

19

Я думаю, на это уже был дан ответ, но просто хотел добавить дополнительный совет.

Для веб-проектов в Eclipse почти всегда желательно управлять зависимостями с Maven. Используйте плагин Maven, например, m2e. После того, как вы добавите зависимость к вашему проекту Maven, он должен автоматически развернуть эти библиотеки до WEB-INF/lib.Если этого не произойдет (по каким-то причинам), вы можете явно сделать так:

  1. Щелкните правой кнопкой мыши на вашем проекте в Project Explorer,
  2. Выберите Свойства
  3. Выберите Сборка Развертывание
  4. Если Maven Dependencies не является одной из записей, библиотеки не были добавлены автоматически, поэтому мы добавим их сейчас
  5. Выберите Добавить
  6. Выберите Java Построить Путь в дневнике
  7. Выберите зависимостями Maven
  8. CLICK Готово

Это должно добавить библиотеки WEB-INF/Lib , хотя вы все равно не увидите их в представлении Project Explorer. Но ваш ClassNotFoundException должен уйти сейчас.

+0

Большое спасибо. Отрывал мои волосы. Это сработало для меня. –

+0

Сохранял мой день тоже. Eclipse Luna, Java SE 1.8, JAX-RS Jersey 2.17. – Mouse

+0

Отличные точки, я использовал maven, но не имел его части пути, когда я преобразовал проект maven в динамический веб-проект :(Устранялся ли этот вопрос дольше, чем я хочу признать ... спасибо, что спасли меня:) –

5

Хотя все вышеперечисленное может применяться (Eclipse - не самое надежное приложение), убедитесь, что вы дважды проверили ваши зависимости от maven. Следует отметить, что для трикотажа 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> 
+0

, добавив, что «org.glassfish.jersey.containers» помог мне решить эту ошибку. – yansigner

0

Я также соблюдая тот же вопрос. Я использую tomcat8 с Maven. Если я построю Dynamic Web Project и добавить все библиотеки вручную, проект работает отлично, но если я использую 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> 
+1

не выглядит для меня решением, не так ли? – kleopatra

0

Ввод jersey jar файлов в WEB-INF/lib должен работать.

Если вы не можете поместить свои файлы jar jar в WEB-INF/lib, попробуйте скопировать его вручную, пройдя свое рабочее пространство и перезапустив eclipse! Это сработало для меня.

0

Для меня, исправление делает это:

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 только что сделали вещи более сложной, как Exception сообщение получило более сложным и неуместных

EDIT: о чем также помогает сделать проект обновления в вашем проекте Maven.

0

Добавить библиотеку Джерси в путь сборки под библиотеки

+0

http://www.java2s.com/Code/Jar/j/Downloadjaxrsri20sourcesjar.htm получить его отсюда – Moitt

0

Я хотел бы добавить, у меня была такая же проблема и @ ответ Эдин работал, но я использовал IntelliJ. Так я думал, что я хотел бы добавить способ сделать это для Intellij (для будущих людей, как я):

  1. Файла
  2. Структура проекта
  3. Артефакты
  4. Вы должны иметь артефакт там имя вашего проекта выберите его
  5. справа вы увидите список доступных элементов
  6. выберите все доступные элементы, щелкните правой кнопкой мыши, а затем выберите параметр, который добавляет их к WEB-INF/Lib
Смежные вопросы