servlet-api-2.5.jar - jarがロードされていません

servlet-api-2.5.jar – jar not loaded

Tomcatに「war」ファイルをデプロイすると、次のエラーメッセージがヒットします。

Jul 17, 2014 7:59:55 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\apache-tomcat-7.0.53\webapps\hc\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded.
See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class

使用ツール:

  1. JDK1.7

  2. メーベン3

  3. Tomcat 7

1. 理由

Tomcatのコンテナには独自のバージョンのservlet-api.jarが付属しており、「war」ファイルが同じjarを再度デプロイするため、問題のクラスがjavax / servlet /Servlet.classになります。

これは、Mavenをビルドツールとして使用している開発者にとって非常に一般的な問題です。 通常、次のようにプロジェクトの依存関係としてservlet-apiを含めます。

pom.xml

    
        javax.servlet
        servlet-api
        2.5
    

WARファイルを作成するとき、Mavenにはservlet-apiも含まれます。

2. 溶液

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

pom.xml

    
        javax.servlet
        servlet-api
        2.5
        provided