validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
项目环境
Maven、Tomcat7.0.27、jdk1.8.0_111
报这个错误的原因是项目中依赖 javax.servlet-api 包和Tomcat本身的包冲突了,Tomcat本身也有这个包
有人说删除项目中的servlet-api包,但删除项目中的servlet-api依赖包,项目编译都报错
解决办法是修改 dependency 的scope
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
Scope 有5个值可以设置
compile: 缺省值,适用于所有阶段,会随着项目一起发布。
provided: 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime: 只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test: 只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system: 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
这里设置provided就是期忘Tomcat提供这个依赖包,问题解决
util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18
上面问题解决之后又遇到第二个问题
解决办法是 升级tomcat版本,tomcat升级到8,问题解决