整maven+ssm出现的错误 java.lang.UnsupportedClassVersionError: .... : Unsupported major.minor version 51.0

来源:互联网 发布:和我信造粉软件 编辑:程序博客网 时间:2024/05/31 18:31

整maven+ssm时junit测试时报了个错:

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

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105)
at org.springframework.test.context.TestContextManager.retrieveTestExecutionListeners(TestContextManager.java:230)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:109)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:31)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference.<init>(JUnit4TestMethodReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:54)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

上网查了下它的意思是说,程序编译的时候用了一个较高版本的JDK,但是在程序运行的时候却用了一个较低版本的jdk。事实上,我也确实是这么做的,我在eclipse里面先用jdk1.7将程序跑了一遍,然后用jdk1.6跑程序就会出现上述的错误,原因就是在用jdk1.7跑了程序没有问题,这时候在工程的bin目录下面就产生了相应于jdk1.7的class文件,下次再用jdk1.6跑这个工程,由于class文件是有jdk1.7产生的,所以程序跑不通也不足为奇!   解决的方法就是在第一次跑这个工程的时候用用较低版本的jdk,然后再用较高版本的jdk跑或者是一直用较高版本的jdk跑。也就是JDK较高版本兼容较低版本、但是较低版本却是无法完成较高版本的功能。这也是符合逻辑的。

然后果断换成jdk1.7(下图)

针对此项目(在此项目右击--》Properties)

 



 

这样我们就可以选择我们想要的开发环境和运行环境

 

这是方法一:防患于未然

 

那么我们来看一下方法二,

当你程序代码都已经写好的时候,

出现版

本运行版本环境过低的时候,我们不可能再去重新创建一个工程了,

我们要是需要改动

java

编译环境的版本,

 

参照部分
http://wenku.baidu.com/link?url=AztXOeq6Y4LiUtmSPHSUbpMiayAjlvSUhjrPOoN27Mzdt5UzdWgJ7tgHJ7BdwOSa8uaJo5i_p4K_PndYeoNmyT7XrJ6obD9noXHAoNL-noy)
那么我们来看一下方法二,当你程序代码都已经写好的时候,出现版本运行版本环境过低的时候,我们不可能再去重新创建一个工程了,我们要是需要改动java编译环境的版本, 

 

 



——————————————————————————————————————————————————————————————————————

maven 打war包

pom.xml-->run as-->Maven install


 上面testMaven上打个红叉号 :看了下problem中有两处错误
(1)Description ResourcePathLocationType
Java compiler level does not match the version of the installed Java project facet.testMavenUnknownFaceted Project Problem (Java Version Mismatch)

解决办法

在项目上右键Properties-》Project Facets,在打开的Project Facets页面中的Java下拉列表中,选择相应版本。
有可能是java1.6 改成java6之类的

(2)DescriptionResourcePathLocationType
Project configuration is not up-to-date with pom.xml. Run project configuration updatetestMavenline 1Maven Configuration Problem

解决办法 (我的版本Myeclipse10.06)

在项目上右击Maven4Myeclipse-->update project configuration...

然后这两个问题解决后项目就没有红叉了。


由于此前的项目都用的是Myeclipse自带的jdk1.6版本的,然后就把环境全部换成1.6了,修改的时候注意下就行了,如下图:



build path的JDK版本是你开发的时候编译器需要使用到的,例如,如果用的JDK1.4就不能使用泛型。而java compiler compliance level设置的是你写好的JAVA代码按照什么JDK版本级别编译,例如:设置的是1.4,编译出来的class文件可以在1.4以上的JRE上运行,如果用的是5.0级别编译,就不能运行在1.4的环境里面,会提示版本过高。 
只要build path的JDK版本高于或等于java compiler compliance level里面的级别都可以




0 0
原创粉丝点击