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
使用ツール:
-
JDK1.7
-
メーベン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