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. Maven 3

  3. Tomcat 7

1.理由

Tomcatのコンテナには、 `servlet-api.jar`の独自のバージョンが付属しています。また、「war」ファイルは、同じjarを再度展開し、「Offending」クラス(javax/servlet/Servlet.class)を生成します。

これはビルドツールとしてMavenを使用している開発者にとっては本当によくある問題です。通常は、次のようなプロジェクトの依存関係として `servlet-api`をインクルードします:

pom.xml

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>

warファイルをビルドするとき、Mavenには `servlet-api`も含まれます。

2.解決策

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

pom.xml

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