102

動的 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たが、うまくいきませんでした。私の場合、何をすべきか教えてください。

4

13 に答える 13

114

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

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

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
于 2013-03-24T17:23:52.573 に答える
21

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

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

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

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

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

于 2013-05-23T09:48:27.947 に答える
4

これを修正するには、スコープprovidedに設定します。これにより、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>
于 2015-04-09T03:13:11.593 に答える
2

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

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt
于 2014-11-10T20:23:48.000 に答える
2

Maven 依存関係のスコープ

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

于 2014-12-29T15:38:15.773 に答える
1

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

ただし、最終的に機能したのは、新しいサーバーインスタンスを削除して追加することだけで、実際に数秒かかりました。

基本的に、サーバーの下のEclipseでTomcatサーバーを右クリックして削除しました。次に、新しい Tomcat サーバーを追加しました。アプリケーションをクリーンアップして再デプロイしたところ、このエラーは解消されました。

于 2015-04-16T08:57:55.430 に答える
0

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

于 2013-04-24T15:55:30.150 に答える
0

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

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

于 2016-02-20T14:05:09.183 に答える