java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor versi

在运行junit测试的时候,发生一下异常:

[java]  view plain  copy
  1. java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor version 51.0  
  2.     at java.lang.ClassLoader.defineClass1(Native Method)  
  3.     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)  
  4.     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)  
  5.     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)  
  6.     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)  
  7.     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)  
  8.     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)  
  9.     at java.security.AccessController.doPrivileged(Native Method)  
  10.     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)  
  11.     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
  12.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
  13.     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)  
  14.     at java.lang.Class.getDeclaredConstructors0(Native Method)  
  15.     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2398)  
  16.     at java.lang.Class.getConstructor0(Class.java:2708)  
  17.     at java.lang.Class.getDeclaredConstructor(Class.java:1987)  
  18.     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105)  
  19.     at org.springframework.test.context.TestContextManager.retrieveTestExecutionListeners(TestContextManager.java:232)  
  20.     at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)  
  21.     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120)  
  22.     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:109)  
  23.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)  
  24.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)  
  25.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)  
  26.     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)  
  27.     at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)  
  28.     at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)  
  29.     at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)  
  30.     at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)  
  31.     at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)  
  32.     at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)  
  33.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)  
  34.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)  
  35.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)  
  36.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)  
  37.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)  
  38.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)  
  39.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)  
  40.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  


原因是由于工程中使用到了servlet-api的jar包依赖,如下


[java]  view plain  copy
  1. <dependency>  
  2.   <groupId>javax.servlet</groupId>  
  3.   <artifactId>javax.servlet-api</artifactId>  
  4.   <version>3.1.0</version>  
  5.   <scope>provided</scope>  
  6. </dependency>  

由于这个jar包是用jdk1.7编译的,我的工程是用jdk1.6,于是发生了以上错误。

数据源的class文件编译的jdk的版本比我的服务器上的jdk的版本要高造成的,比如class文件是从jdk1.7编译出来的class,放到jdk1.6的tomcat服务器上就会报这个错

ps:之前没写单元测试,开发环境都是部署在tomcat下测试的,由于这个jar包的scope是provider,意味着servlet-api不会部署到tomcat低下(打war包也不会打进去),而是用tomcat自身的servlet-api,所以没有发现以上错误。


解决方案:


把servlet-api的版本换成用jdk1.6编译的版本就可以了,我用的是

[java]  view plain  copy
  1. <dependency>  
  2.   <groupId>javax.servlet</groupId>  
  3.   <artifactId>javax.servlet-api</artifactId>  
  4.   <version>3.0.1</version>  
  5.   <scope>provided</scope>  
  6. </dependency>  


猜你喜欢

转载自blog.csdn.net/wdsdads/article/details/80635381
今日推荐