web-dev-qa-db-ja.com

jarがロードされていません。サーブレット仕様2.3、セクション9.7.2を参照してください。問題のあるクラス:javax / servlet / Servlet.class

動的WebプロジェクトでもあるMavenプロジェクトを実行しています。 MavenですべてのSpringライブラリを使用しました。 web.xmlを作成しましたが、Tomcat 7サーバーを起動すると、次のメッセージが表示されます。

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.Eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

webapp/libからサーブレットを削除しようとしましたが、うまくいきませんでした。私の場合に何をすべきか教えてください。

96
dreambigcoder

明らかに、コンテナのクラスパスにこれらのクラスが含まれているため、サーブレットAPIの.jarファイルをwebapp内に埋め込まないでください。このjarに含まれるインターフェースを実装します。

依存関係は、Maven pomのデフォルトのprovidedスコープではなく、compileスコープ内にある必要があります。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
108
JB Nizet

この警告メッセージは、サーブレットAPI jarファイルが既にコンテナーにロードされているときに、libディレクトリーからもう一度ロードしようとすると表示されます。

サーブレットの仕様では、webapps libディレクトリにservlet.jarを含めることは許可されていません。

  • libディレクトリからservlet.jarを削除するだけで、警告メッセージを取り除きます。
  • libディレクトリにjarが見つからない場合は、ビルドパスをスキャンしてjarを削除します。

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

Mavenプロジェクトを実行している場合、pom.xmlでjavax.servlet-api依存関係をスコープprovidedに変更します。これは、コンテナーが既にサーブレットjar自体を提供しているためです。

21
Lucky

修正するには、scopeprovidedに設定します。これは、Mavenがコードservlet-api.jarをコンパイルとテストのみに使用することを示しますが、WARファイルには含めません。デプロイされたコンテナは、実行時にservlet-api.jarを「提供」します。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
4
Sandeep Kumar

問題のあるjarファイルを追跡するには、次のWindowsコマンドラインが役立つ場合があります。フォルダー内のすべてのjarにあるすべてのクラスファイルのインデックスを作成します。デプロイされたアプリのlibフォルダー内から実行し、index.txtファイルで問題のあるクラスを検索します。

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt
2
Chris Nava

Maven依存関係スコープ

provided:これはコンパイルによく似ていますが、expectJDKまたはa- container実行時に依存関係を提供します。たとえば、Java Enterprise Edition用のWebアプリケーションを構築する場合、ServletAPIおよび関連するJavaスコープのEE API 提供Webコンテナがこれらのクラスを提供するため。このスコープは、コンパイルおよびテストクラスパスでのみ使用でき、推移的ではありません。

2
yuceel

私はこの問題に苦労してきました、そして、私は多くの「解決策」を試みました。

ただし、最後に機能したのは実際に数秒でした。新しいサーバーインスタンスを削除して追加し直す

基本的に、Eclipseの[サーバー]でTomcatサーバーを右クリックして削除しました。次に、新しいTomcatサーバーを追加しました。アプリケーションをクリーンアップして再デプロイし、このエラーを取り除きました。

1
iaforek

次のディレクトリ内でjarファイルel-api.jarを確認します。C:\ Apache-Tomcat-7.0.39\lib\el-api.jarが存在する場合は、WebアプリケーションWEB-INF\lib \のこのディレクトリに存在します。 el-api.jar jarを削除する必要があります

1
Fred Ondieki

除外およびprovided依存関係は子プロジェクトでは機能しません。

Mavenプロジェクトで継承を使用している場合、mustpom.xmlファイルにこの構成を含めます。 pom.xmlに<parent>...</parent>セクションがあります継承を使用している場合。したがって、親pom.xmlには次のようなものがあります。

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <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.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
0
lmiguelmh

通常、このメッセージが表示された場合、問題はありません。それが言うなら

INFO: validateJarFile(/<webapp>/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

Tomcatはすでにそのjarのビルトインバージョンを持っているため、servlet-api-2.5.jarを無視しているので、あなたのものを使用することはありません。通常、これは問題を引き起こしません。

ただし、WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.classと表示される場合

その後、あなたができること(私のインスタンスでは、影付きのjarファイルです)が実行されます

$ mvn依存関係:ツリー

そして、サーブレットAPIまたはそれに類するもの(例:Tomcat-servlet-api-9.0.0)のいずれかであるjarに依存する「何か」に推移的な依存関係があることを発見します。したがって、exに除外を追加します(例:私の場合、Tomcat、あなたの場合、おそらく他の回答で言及されたもの):

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.Apache.Tomcat</groupId>
        <artifactId>Tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>
0
rogerdpack

uRLパターンが間違っていると、このエラーが発生する可能性があります。

例えば。 @WebServlet( "login")を作成した場合、このエラーが表示されます。正しいものは@WebServlet( "/ login")です。

0
Phyo Thinza

JAX-WS依存ライブラリ「jaxws-rt.jar」がありません。

ここに行く http://jax-ws.Java.net/ JAX-WS RIディストリビューションをダウンロードします。解凍し、「jaxws-rt.jar」をTomcatライブラリフォルダー「{$ Tomcat}/lib」にコピーします。 Tomcatを再起動します。

0
Faiz