在JDK Compliance eclipse中指定次要版本

时间:2015-07-01 12:05:04

标签: java eclipse

我的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向前兼容次要版本?如果是这样,显然我不相信这个错误。

8 个答案:

答案 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)

  1. 下载JRE 1.8.0_20

  2. 然后将 JRE 1.8.0_20 指定给Eclipse IDE,如下所示:

    enter image description here

  3. 然后重新构建您的应用程序。

  4. (你的问题不是错误: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);
}