web-dev-qa-db-ja.com

Tomcatの起動時のClassNotFoundException

REST Webサービスを作成しようとしています。

私のプロジェクトは次のようになります:

enter image description here

トレースバックは次のとおりです。

8 déc. 2011 18:31:36 org.Apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production     environments was not found on the Java.library.path: C:\Program Files\MyEclipse\Common\binary\com.Sun.Java.jdk.win32.x86_1.6.0.013\bin;C:\Program Files\MyEclipse\Common\plugins\com.genuitec.Eclipse.easie.Tomcat.myeclipse_9.0.0.me201109141806\Tomcat\bin
8 déc. 2011 18:31:36 org.Apache.coyote.http11.Http11Protocol init
INFO: Initialisation de Coyote HTTP/1.1 sur http-8080
8 déc. 2011 18:31:36 org.Apache.catalina.startup.Catalina load
INFO: Initialization processed in 394 ms
8 déc. 2011 18:31:37 org.Apache.catalina.core.StandardService start
INFO: Démarrage du service Catalina
8 déc. 2011 18:31:37 org.Apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13
8 déc. 2011 18:31:37 org.Apache.catalina.startup.HostConfig deployWAR
INFO: Déploiement de l'archive Test-0.0.1-SNAPSHOT.war de l'application web
8 déc. 2011 18:31:37 org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Documents and Settings\Naya\Workspaces\MyEclipse 10\.metadata\.me_tcat\webapps\Test-0.0.1-SNAPSHOT\WEB-INF\lib\javax.servlet-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:37 org.Apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Documents and Settings\Naya\Workspaces\MyEclipse 10\.metadata\.me_tcat\webapps\Test-0.0.1-SNAPSHOT\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:38 org.Apache.catalina.core.ApplicationContext log
INFO: La servlet Test JAX-RS REST Servlet est marqué comme indisponible
8 déc. 2011 18:31:38 org.Apache.catalina.core.ApplicationContext log
Grave: Error loading WebappClassLoader
delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.Apache.catalina.loader.StandardClassLoader@19e8329
 com.Sun.jersey.spi.container.servlet.ServletContainer
Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1358)
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1204)
    at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1083)
    at org.Apache.catalina.core.StandardWrapper.load(StandardWrapper.Java:981)
    at org.Apache.catalina.core.StandardContext.loadOnStartup(StandardContext.Java:4042)
    at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4348)
    at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:791)
    at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:771)
    at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:525)
    at org.Apache.catalina.startup.HostConfig.deployWAR(HostConfig.Java:825)
    at org.Apache.catalina.startup.HostConfig.deployWARs(HostConfig.Java:714)
    at org.Apache.catalina.startup.HostConfig.deployApps(HostConfig.Java:490)
    at org.Apache.catalina.startup.HostConfig.start(HostConfig.Java:1138)
    at org.Apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.Java:311)
    at org.Apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.Java:117)
    at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1053)
    at org.Apache.catalina.core.StandardHost.start(StandardHost.Java:719)
    at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1045)
    at org.Apache.catalina.core.StandardEngine.start(StandardEngine.Java:443)
    at org.Apache.catalina.core.StandardService.start(StandardService.Java:516)
    at org.Apache.catalina.core.StandardServer.start(StandardServer.Java:710)
    at org.Apache.catalina.startup.Catalina.start(Catalina.Java:566)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.Apache.catalina.startup.Bootstrap.start(Bootstrap.Java:288)
    at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:413)

私のweb.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://Java.Sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee 
    http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name> 
  <servlet>
    <display-name>Test JAX-RS REST Servlet</display-name>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <servlet-class>
        com.Sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

誰も私を助けることができますか?

24
Seb P

同じ問題が発生しました。バージョン1.12を使用していました。

クラスが見つかりませんでしたcom.Sun.jersey.spi.container.servlet.ServletContainer他のフォーラムで提案されている「jersey-server-1.12.jar」または「jersey-core-1.12.jar」内。

これをビルドパスに追加すると、Eclipseで簡単に確認でき、上記のjarファイルにそのクラスがないことがわかります。

私は周りを検索し、次を見つけました:

クラスcom.Sun.jersey.spi.container.servlet.ServletContainerは別のjarファイル( "jersey-servlet-1.12.jar")にあります。

これに関するドキュメントは見つかりませんでした。しかし、WEB-INF/libにこのファイルがあると、この問題は解決しました。

お役に立てれば。

32
Anjaneya Reddy

解決策:

Pom.xmlに依存関係のみを追加します。

 <dependency>
      <groupId>com.Sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.13</version>
 </dependency>

これで、アプリケーションのクラスはcom.Sun.jersey.spi.container.servlet.ServletContainerになります。

ps:ライブラリがTomcatデプロイに送信されているかどうかを忘れずに確認してください。

確認するには:

プロジェクトを右クリック->プロパティ-> Deployment AssemblerとSourceタブにMaven Dependecies

それ以外の場合:

[追加]ボタンをクリックします-> Java Build Path-> Maven Dependecies-> Finish。

アプリケーションを実行するたびに、すべてのライブラリがデプロイにインポートされます。

ps:Mavenプロジェクトが更新された場合、これらの手順を再作成する必要があります。

35
Diego

Mavenで作業している場合考えられる問題は、jarがTomcatにデプロイされないことです。したがって、Java Build Path(プロジェクト>プロパティ>ビルドパス)にMaven依存関係がありますが、Eclipse Maven依存関係からTomcatでプロジェクトを実行すると、Tomcatにデプロイされません。これを解決するには、右クリック>プロパティを選択し、「Deployment Assembly」を選択します。そして、Java Build Path Entries。この方法で、WTPプラグイン(Eclipse内でTomcatを実行している)Mavenのjarもコピーする必要があること enter image description here

18
luigi7up

Jersey 2.では、サーブレットコンテナの実装が変更されました。古いcom.Sun.jersey.spi.container.servlet.ServletContainerの代わりにorg.glassfish.jersey.servlet.ServletContainerを使用する必要があります。

クラスは

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.0-m11</version>
    </dependency>

以下を使用して、骨格プロジェクトを作成できます。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -
DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.0-m11
9
JasonPlutext

Tomcatを個別に実行している場合でも、Eclipseで実行している場合でも、Jersey JARをWEB-INF/libディレクトリに配置する必要があります。

これは私のために働いた。

3
Anupam

クラスローダーがクラスcom.Sun.jersey.spi.container.servlet.ServletContainerを見つけることができません。

JerseyのJARをWEB-INF/libディレクトリに配置する必要があります。

これは役立つかもしれません:

http://www.suryasuravarapu.com/2009/02/rest-jersey-configuration-on-Tomcat.html

今、私はあなたが投稿した画像を見て、あなたの問題を見ています:あなたはEclipseとMavenを使用していますが、それらが何をしているのか本当に理解していません。

/webappsディレクトリに必要なすべてのサードパーティJARがあるTomcat WEB-INF/libディレクトリにWARファイルを作成する必要があります。そうしないと、Tomcatはそれらを見つけられません。

問題を単純化することをお勧めします。 WARファイルを手動で作成します。 EclipseとMavenはそのままにしておきます。動作するようになったら、あなたの人生を楽にするためのものを追加してください。それらがなくても動作するようになっているので、あなたは彼らが何をする必要があるかを理解するでしょう。

1
duffymo

上記のluigi7upの投稿は私にとってはうまくいきました。 Tomcat 7.0.37、maven 3.1.1、およびjersey 1.17.1を使用しています。右クリック->プロパティ-> Deployment Assembly-> Addをクリック-> Java Build Path Entries-> selected Maven Dependencies。OK]をクリックしました。

最初にこれを試したとき、「Java.lang.ClassNotFoundException:com.Sun.jersey.spi.container.servlet.ServletContainer」エラーを受け取っていないことに気付きましたが、他の「クラスが見つかりません」というエラーに気づきました'メッセージ(残念なことに、それらのメッセージを文書化しませんでした)。次のジャージ依存関係を使用していました。

<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.17.1</version>
</dependency>

それを取り出して、次の依存関係を追加しました。

<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>

その後、物事が機能し始めました。

これが誰かを助けることを願っています!

1

WEB-INF/libディレクトリに追加しましたが、Eclipseからlibフォルダーを更新してから動作するようになるまで機能しませんでした。

0
Milind

from: http://jersey.Java.net/nonav/documentation/latest/chapter_deps.html#d4e1687

サーブレットコンテナにアプリケーションをデプロイするには、そのコンテナとのデプロイメント依存関係が必要です。

サーブレットコンテナの設定方法については、Javaドキュメントを参照してください。

サーブレットの使用:com.Sun.jersey.spi.container.servlet.ServletContainerには、jersey-servletモジュールへの依存が必要です。

サーブレットを使用するMaven開発者:EE 5以外のサーブレットでcom.Sun.jersey.server.impl.container.servlet.ServletAdaptorを使用するには、さらにpersistence-apiモジュールへの依存が必要です。

Maven以外の開発者が必要とするもの:persistence-api.jar

0
Leonid

Anjaneya Reddy、あなたが指摘したように、クラスはそれが入っているはずのJARにさえありません。これは私を困惑させます。

すべてがMavenフレンドリーになったため、それに依存する必要なく簡単なチュートリアルをバングアウトすることは困難です。

0
Half_Duplex

明らかに、デプロイメントクラスパスからライブラリが欠落している必要があります。

WEB-INF/libディレクトリにある次のjarをコピーします

asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.15.jar
jersey-core-1.15.jar
jersey-json-1.15.jar
jersey-server-1.15.jar
jersey-servlet-1.15.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
0
bavan

次の依存関係が役立ちます。

<dependency>
  <groupId>com.Sun.jersey</groupId>
  <artifactId>jersey-server</artifactId>
  <version>1.8</version>
</dependency>

参照: http://www.mkyong.com/webservices/jax-rs/classnotfoundexception-com-Sun-jersey-spi-container-servlet-servletcontainer/

0