servlet-api-2.5.jar – jar not loaded
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>
I have this added into my pom file. While building from the continuous integration server, I don’t want the server to download any JARs. So, I upload the jar to the server manually. So, I have
/maven_repository/javax/servlet/servlet-api/2.5
and the contents are:
servlet-api-2.5.pom.sha1
servlet-api-2.5.pom
servlet-api-2.5.jar.sha1
servlet-api-2.5.jar
_remote.repositories
servlet-api-2.5.pom.lastUpdated
But, still it tries to communicate the server and I still get error while building saying:
Failed to collect dependencies at javax.servle t:servlet-api:jar:2.5: Failed to read artifact descriptor for javax.servlet:servlet-api:jar:2.5: Cou ld not transfer artifact javax.servlet:servlet-api:pom:2.5 from/to central (http://repo.maven.apache .org/maven2): repo.maven.apache.org: Unknown host repo.maven.apache.org
Please help.
Thanks,
ashtrick
I am using maven and I have set the scope as provided
javax.servlet
servlet-api
2.5
provided
Still I am getting this in the log:
INFO: validateJarFile(/spare/local/xxx/apache-tomcat-7.0.53/webapps/MyWebApp/WEB-INF/lib/servlet-api-2.5-6.1.11.jar) – jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
m too getting same problem..any solution have got…plzzz post
in case if someone is not using Maven…do you think what will be soultion???
Just make sure you do not deployed your own servlet-api.jar. For example, DO NOT include serlvet-api.jar in your war file.
I am facing the same problem. I am not using the maven still I’m getting this error.
Don’t know what is the solution.
problem fixed thanks to you 🙂