今天有学生说自己的Eclipse的Java代码只能在新建的项目中运行,运行导入项目中类就报错
异常信息
java.lang.UnsupportedClassVersionError:
com/demo1/Demo1Application has been compiled by a more recent version of
the Java Runtime (class file version 55.0),
this version of the Java Runtime only recognizes class file versions up to 52.0
异常分析
ava.lang.UnsupportedClassVersion错误:
com/demo1/demo1已通过更新版本的Java Runtime(类文件版本55.0)编译,
此版本的Java Runtime只能识别52.0以下的类文件版本
通过异常代码可以看出 编译的运行环境有问题 十之八九 就是 JRE不一致导致
PS:
不同的 JDK 版本编译出的 class 文件也可能有差异,
有的高版本 JDK 能够兼容低版本的 JDK 自然没有问题,但反之就会出现问题啦!
解决方案
1、检查本机的JDK和JRE版本
W+R+CMD
java -version
javac -version
发现学生安装了多个JDK版本 并且 JDK和JRE版本并不一致 重新配置环境变量
2、检查Eclipse中默认配置的JDK版本
PS: Eclipse版本年代不同 默认的JDK版本有所区别
Window -> Preferences Java -> compiler -> compiler compliance level -> 下拉选中对应JDK版本
3、更新项目的JRE环境
右键项目 -> Build Path -> Configure Bulid Path -> Libraries -> 更新JRE环境
以上步骤执行完成任然无法编译类 意味着当前项目的JRE配置未改成功
此时有点手足无措的感觉 只能搬起杀手锏 检查项目中的原始文件配置信息
4、找到项目目录settings下的org.eclipse.jdt.core.prefs文件 其中包含编译配置
可以明显看出两个项目的编译版本是不一致的
两种方法任选
- 拷贝攻略 org.eclipse.jdt.core.prefs文件可以从同类型的项目中直接拷贝,无需修改。
- 手动修改成当前配置的compiler版本
虽然文件中其他配置属性不一样 但是对最终编译无影响 详细属性含意请自行百度
学生的导入项目的配置信息
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=13
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=13
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=13
工作空间新建项目的默认配置
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
Eclipse中.setting目录下文件介绍
网友的解释
对于出现java.lang.UnsupportedClassVersionError错误的原因,
大都是因为我们编译java.class文件的 JDK 和我们运行java.class文件的 JDK 的版本不同而产生。
不同的 JDK 版本之间,特别是高版本 JDK 编译的java.class文件在低版本的 JDK 上运行,
更容易造成低版本的 JDK 无法识别的问题,从而报出此错误。
此外,在 Maven 项目中,也有可能出现java.lang.UnsupportedClassVersionError的错误,同样是因为版本不同而产生无法识别的错误。不过,在 Maven 项目中造成这样错误的原因可能是不同的 Maven 版本与不同的 java JDK 的版本之间产生的原因,例如,maven 3.3.1+的版本只能运行在java JDK 1.7+的版本上。