これは重複した質問だと感じるかもしれませんが、同じタイトルの質問で私の問題を解決できるものはありません。 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ライブラリがあります。
このプロジェクトを実行するたびに、エラーが発生しました
Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
何か案は?
待って、あなたはjersey
というJerseyライブラリがあると言っていましたが、User Library
と名前を付けてjersey
?その場合、ジャージjarファイルをWebContent-> WEB-INF-> libにコピーしてください。
これはすでに答えられていると思いますが、追加のヒントを追加したかっただけです。
EclipseのWebプロジェクトでは、Mavenを使用して依存関係を管理することをお勧めします。 m2eのようなMavenプラグインを使用します。 Mavenプロジェクトに依存関係を追加すると、それらのライブラリがWEB-INF/libに自動的にデプロイされます。そうでない場合(何らかの理由で)、明示的に行うことができます:
これにより、ライブラリがWEB-INF/libに追加されますが、プロジェクトエクスプローラービューには表示されません。しかし、ClassNotFoundExceptionはすぐに消えるはずです。
上記のすべてを適用できますが(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>
メッセージは、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。プロジェクトの展開アセンブリ構成を開きます。
3。最終warファイルのlibフォルダーに追加できるように、アセンブリにビルドパスjarファイルを追加します。
4。更新されたアセンブリは次のようになります。
[OK]をクリックします。これで準備完了です。
Eclipseでこの問題が発生しました。セットアップが非常に似ている私のプロジェクト-Jersey 2
、Tomcat 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エントリを削除してから新しいエントリを作成することだけでした。私はそれをし、すぐにそれを修正しました。
私も同じ問題を観察しています。 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>
ライブラリの下のビルドパスにJerseyライブラリを追加します
jersey jarファイルをWEB-INF/libに入れると動作するはずです。
ジャージjarファイルをWEB-INF/libに配置できない場合は、ワークスペースを介して手動でコピーして貼り付け、Eclipseを再起動してください!それは私のために働いた。
追加したいのですが、同じ問題があり、@ Edinの答えは機能しましたが、IntelliJを使用していました。だから私はIntellijのためにこれを行う方法を追加すると思った(私のような将来の人々のために):
私にとって、修正はこれを行っていました:
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プロジェクトで更新プロジェクトを実行することです。