servlet-api-2.5.jar jar not loaded
By:Roy.LiuLast updated:2019-08-17
Deployed a “war” file on Tomcat, and hits following error messages :
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
Tools used :
- JDK1.7
- Maven 3
- Tomcat 7
1. Reason
The Tomcat’s container comes with own version of servlet-api.jar, and the “war” file is deploy the same jar again, and causing the Offending class: javax/servlet/Servlet.class.
This is a really common problem for developers who are using Maven as a build tool. Normally, we will include the servlet-api as a project dependency like this :
pom.xml
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency>
When building a war file, Maven will include the servlet-api as well.
2. Solution
To fix it, set the scope to provided. This tells Maven use code servlet-api.jar for compiling and testing only, but NOT include it in the WAR file. The deployed container will “provide” the servlet-api.jar at runtime.
pom.xml
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
References
From:一号门
COMMENTS