web-dev-qa-db-ja.com

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

これは重複した質問だと感じるかもしれませんが、同じタイトルの質問で私の問題を解決できるものはありません。 Eclipse 2.0でRESTful Webサービスを作成するJersey 2.0を使用しています。サーバーとして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というJerseyライブラリがあります。

enter image description here

このプロジェクトを実行するたびに、エラーが発生しました

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

何か案は?

11
Tom

待って、あなたはjerseyというJerseyライブラリがあると言っていましたが、User Libraryと名前を付けてjersey?その場合、ジャージjarファイルをWebContent-> WEB-INF-> libにコピーしてください。

3
Zhenxiao Hao

これはすでに答えられていると思いますが、追加のヒントを追加したかっただけです。

EclipseのWebプロジェクトでは、Mavenを使用して依存関係を管理することをお勧めします。 m2eのようなMavenプラグインを使用します。 Mavenプロジェクトに依存関係を追加すると、それらのライブラリがWEB-INF/libに自動的にデプロイされます。そうでない場合(何らかの理由で)、明示的に行うことができます:

  1. Project Explorerでプロジェクトを右クリックします
  2. プロパティを選択します
  3. 展開アセンブリを選択します
  4. Maven Dependenciesがエントリの1つではない場合、ライブラリは自動的に追加されなかったため、ここで追加します
  5. 追加を選択します
  6. Javaビルドパスエントリを選択します
  7. Maven Dependenciesを選択します
  8. 完了をクリックします

これにより、ライブラリがWEB-INF/libに追加されますが、プロジェクトエクスプローラービューには表示されません。しかし、ClassNotFoundExceptionはすぐに消えるはずです。

19
Ebin

上記のすべてを適用できますが(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>
5

メッセージは、Jerseyライブラリーがクラスパスにない根本的な原因を特定できるほど単純です。

まず、天気がpom.xmlで定義されているジャージの依存関係があるかどうかを確認する必要があります。ここにない場合は、定義できる依存関係があります。 pom.xmlで既に定義されている場合、pom.xmlで依存関係を追加することを無視します

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

解決策-展開アセンブリにジャージーライブラリを追加します

1。プロジェクトエクスプローラーでプロジェクトを右クリックします

2。プロジェクトの展開アセンブリ構成を開きます。

enter image description here

3。最終warファイルのlibフォルダーに追加できるように、アセンブリにビルドパスjarファイルを追加します。

enter image description here

4。更新されたアセンブリは次のようになります。

enter image description here

[OK]をクリックします。これで準備完了です。

2
Varun

Eclipseでこの問題が発生しました。セットアップが非常に似ている私のプロジェクト-Jersey 2Tomcat 7。私はEclipseの内部からTomcatを実行していますが、Eclipseが途中でどこかにライブラリをTomcatに正しくデプロイする方法を忘れていたようです。

手動でTomcatにwarファイルを展開し、startup.shそしてそれはうまく動作しましたが、Eclipse経由で起動した場合、Webコンテンツを取得しますが、Jerseyクラスが存在しないため、REST APIは機能しません。ログインサーブレットは機能します。ジャージビットだけではなく、コンソールにも同じエラーがあります。

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

始めるとき。したがって、EclipseがコードをTomcatにデプロイする方法に問題があるに違いありません。 Eclipseサーバーに移動して作業ディレクトリをクリアしようとしましたが、何もしませんでした。 (クラスが欠落している場合でもそうではありません)。

唯一機能したのは、Eclipseのサーバー構成に移動し、Tomcatエントリを削除してから新しいエントリを作成することだけでした。私はそれをし、すぐにそれを修正しました。

1
Damon Smith

私も同じ問題を観察しています。 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)

次の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>
0
Devil

ライブラリの下のビルドパスにJerseyライブラリを追加します

0
Mohit Singh

jersey jarファイルをWEB-INF/libに入れると動作するはずです。

ジャージjarファイルをWEB-INF/libに配置できない場合は、ワークスペースを介して手動でコピーして貼り付け、Eclipseを再起動してください!それは私のために働いた。

0

追加したいのですが、同じ問題があり、@ Edinの答えは機能しましたが、IntelliJを使用していました。だから私はIntellijのためにこれを行う方法を追加すると思った(私のような将来の人々のために):

  1. ファイル
  2. プロジェクト構造
  3. アーティファクト
  4. あなたのプロジェクトにちなんで名付けられたアーティファクトがあるはずです、それを選択してください
  5. 右側に、リストが表示されます利用可能な要素
  6. 使用可能なすべての要素を選択して右クリックし、それらをWEB-INF/Libに追加するオプションを選択します
0
Miniman

私にとって、修正はこれを行っていました:

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>

サーブレットjarをWEB-INF/libに配置すると、例外メッセージがより複雑で無関係になり、事態がさら​​に複雑になりました。

編集:ああまた何が助けになるのは、Mavenプロジェクトで更新プロジェクトを実行することです。

0
kaya