servlet-api-2.5.jar – jarがロードされていません
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
使用されるツール:
-
JDK1.7
-
Maven 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>
参考文献
: Introduction to the Dependency Mechanism]