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

Jersey + Google 앱 엔진을 사용하여 이틀 동안 간단한 hello world 애플리케이션을 빌드하려고합니다. 간단한 AppEngine 프로젝트의 경우이 자습서를 따랐으며 둘 다 잘 작동합니다.
https://developers.google.com/appengine/docs/java/gettingstarted/creating
https://developers.google.com/appengine/docs/java/webtoolsplatform

하지만 지금은 Jersey를 추가하고 http://www.vogella.com/articles/REST/article.html 튜토리얼을 따르려고합니다 .

하지만 서버는 계속 나에게

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

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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

여기JAX-RS 2.1 RI bundle 에서 Jersey 를 다운로드 하고 튜토리얼에 설명 된대로 폴더 에 모든 jar 파일을 추가 했습니다. 그리고 이틀이 지난 후에도 아무것도 작동하지 않습니다. 나는 Google에서 여러 번 검색했으며 Maven을 사용하는 사람들이 어떻게 든 해결했지만 Maven을 사용하지 않고 해당 자습서를 작성한 사람도 마찬가지입니다.WEB-INF/lib

com.sun.jersey.spi.container.servlet.ServletContainer가져온 파일에 존재 하는지 확인 Jersey jars하기 위해이 정규화 된 이름을 Java로 작성하고 intellisense가 이름을 완성하도록했지만 intellisense를 얻을 수 없었기 com.sun.je때문에 마지막 추측은 최신 Jersey 빌드에서 패키지 재 배열 이 있었다는 것입니다. 그리고 jersey더 이상 내부에 없습니다 com.sun. 나는 지 쳤고 어떤 종류의 도움을 주시면 감사하겠습니다.



답변

Jersey 2 (JAX-RS 2의 RI)를 다운로드했습니다. 참조하는 튜토리얼은 Jersey 1을 사용합니다. ( 여기 ) 에서 Jersey 1.17.1을 다운로드 하면 충분합니다.

Jersey 1은를 사용 com.sun.jersey하고 Jersey 2는 org.glassfish.jersey예외를 사용 합니다.

또한로 init-param시작하는 com.sun.jersey것은 Jersey 2에서 인식되지 않습니다.

편집하다

Jersey 2에서 리소스 및 공급자 등록 에는 Jersey 2에서 클래스 / 인스턴스를 등록하는 방법에 대한 추가 정보가 포함되어 있습니다.


답변

jersey 2.x를 사용하는 경우 서블릿 클래스가 변경되므로 web.xml에서 다른 구성이 필요합니다. 다음 구성으로 web.xml을 업데이트 할 수 있습니다.

    <servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>your.package.path</param-value>
    </init-param>
    <init-param>
     <param-name>unit:WidgetPU</param-name>
     <param-value>persistence/widget</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myrest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>


답변

이것을 pom에 추가하십시오.

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


답변

Jersey 문제가 아니라 일식 설정 문제입니다.

이 스레드에서 ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer

Eclipse 프로젝트 속성-> 배포 어셈블리-> 추가-> Java 빌드 경로 항목-> Gradle 종속성-> 마침을 마우스 오른쪽 버튼으로 클릭합니다.

따라서 Eclipse는 Apache를 시작할 때 Gradle 종속성을 사용하지 않았습니다.


답변

이 시도 :

org.glassfish.jersey.servlet.ServletContainer

서블릿 클래스


답변

http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/ 다른 가이드를 따랐지만 나는 당신과 같은 문제가있었습니다 .

이상한 부분은 당신의 저지에 1.8.x를 사용 가이드 다음 때문에이 버전 간의 호환성 (2.X에 대한 1.x에서) 어떤 문제가 안된다,이 설명서에 내가 사용하고, 그입니다 pom.xml및에 web.xml당신이 참조 com.sun.jersey.spi.container.servlet.ServletContainer1.x 버전 이전에 언급 한 클래스 ( ). 그래서 내가 추론 할 수 있듯이 이것이 작동해야합니다.

내 생각 엔 JDK 1.7을 사용하고 있기 때문에이 클래스는 더 이상 존재하지 않습니다.


그 후, 나는 내 대답으로 해결하려고 노력했지만 도움이되지 않았으며 오류를 다음 pom.xmlweb.xml같이 변경했습니다.java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

존재해야 할 것!

이 오류의 결과로 “새로운”솔루션을 찾았습니다. http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Maven (archetypes)을 사용하여 저지 프로젝트를 생성하십시오.

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0

그리고 그것은 나를 위해 일했습니다! 🙂


답변

나는 또한 비슷한 문제에 직면했습니다. 아래 링크에서 단계 단계 자습서를 통해 문제를 해결했습니다.

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/

  • 주목해야 할 가장 중요한 점은 저지 라이브러리가 TOMCAT WEB-INF / lib 폴더에 올바르게 배치되어야한다는 것입니다. 위 링크에 언급 된 Eclipse 설정에 의해 자동으로 수행됩니다. 종속 JAR 파일로 WAR 파일을 생성합니다. 그렇지 않으면 ClassNotFound 예외 문제가 발생합니다.

apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib

“2014/11/23 오전 12:06 130,458 jersey-client-1.9.jar

2014 년 11 월 23 일 오전 12:06 458,739 jersey-core-1.9.jar

2014 년 11 월 23 일 오전 12:06 147,952 jersey-json-1.9.jar

2014/11/23 12:06 AM 713,089 jersey-server-1.9.jar “4 개 파일 1,450,238 바이트

  • 두 번째 자습서에서는 JSON 출력을 생성하고 소비하는 웹 서비스를 만드는 방법에 대해 설명합니다.

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/

두 링크 모두 작동 방식에 대한 좋은 그림을 제공하고 많은 시간을 절약했습니다.