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