我的JDK版本是 jdk1.8.0_45 ,我使用 eclipse 中的默认JDK合规性设置构建了一个应用程序。
但我的同事正在使用版本 jre1.8.0_20 的JRE。因此,当我的应用程序在他的系统中运行时,它正在抛出一个
java.lang.UnsupportedClassVersionError Unsupported major.minor version 52.0
如果我构建JDK合规性设置为 1.7 的应用程序,它显然可以正常工作。但我不想因为版本不匹配而失去JDK 8的所有功能。
在eclipse中,我无法设置 次要版本合规级别 。是否可以设置???
或者Java向前兼容次要版本?如果是这样,显然我不相信这个错误。
答案 0 :(得分:6)
根据this版本52.0是JDK-8。似乎它的一个Number编译成.class文件,具体取决于JDK。 JDK-7有51个,JDK-6有50个等。
我会说你的同事机器上的执行没有使用JDK / JRE 8.
尝试在同事个人电脑上运行java -XshowSettings
并查看行java.class.version
的输出 - 如果它是JDK 7,则会显示java.class.version = 51.0
。
答案 1 :(得分:3)
您应该指定运行时"执行环境"版本依赖,而不是特定的Java版本。
对于插件,在manifest.mf中,指定执行环境:JavaSE-1.8
对于普通的java项目,在"构建路径...->配置BuildPath"去#"图书馆"然后"添加图书馆"," JRE系统库","执行环境"并选择JavaSE-1.8。 删除路径上的任何其他JRE。
这就是eclipse,找到符合Java> = 1.8的JRE。
答案 2 :(得分:2)
下载JRE 1.8.0_20
然后将 JRE 1.8.0_20
指定给Eclipse IDE,如下所示:
然后重新构建您的应用程序。
(你的问题不是错误:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8124517)
答案 3 :(得分:1)
Java以向后兼容着称,这意味着您在较新的jdk 中较旧的jdk 中构建的任何应用程序都可以运行: / p>
使用 jdk1.8 运行时,在 jdk1.6 或 jdk1.7 中构建应用程序将起作用;可悲的是,它没有相反的方式......
次要版本被视为 jdk 的新版本,并且兼容性问题确实适用。
答案 4 :(得分:1)
没办法。
只需安装jdk1.8.0_20并在已安装的JRE 中选择它。
答案 5 :(得分:1)
只有在主要版本更改(例如从6到7或7到8)时才会出现错误。如果您没有进行次要版本更改,则不会发生此错误。错误52用于在JRE7中运行JDK8代码。因此,请仔细检查设置并将JRE8设置为运行时环境。
答案 6 :(得分:1)
使用x32和x64版本的JDK时,我和我的同事都会面对此问题。他使用Mac,因此只有x64可用(对于Java 8),我使用M $并且都有两个版本。我们必须开发64位版本,否则我们会看到与您相同的错误...
答案 7 :(得分:1)
你可以
(a)在您的系统上安装1.8.0_20并使用以下代码检查生成的类文件的类版本或
(b)在您的同事系统上构建您的应用程序,并使用以下代码检查生成的类版本。
public void checkClassVersion(File classFile) throws IOException{
DataInputStream in = new DataInputStream(new FileInputStream(file));
int magic = in.readInt();
if(magic != 0xcafebabe) {
System.err.println(file.getName() + " is not a valid class!");;
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
in.close();
System.out.println(classFile.getName()+" = "+major+"."+minor);
}