Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JDK Compliance eclipse中指定次要版本_Java_Eclipse - Fatal编程技术网

Java 在JDK Compliance eclipse中指定次要版本

Java 在JDK Compliance eclipse中指定次要版本,java,eclipse,Java,Eclipse,我的JDK版本是jdk1.8.0_45,我在eclipse中使用默认的JDK合规性设置构建了一个应用程序 但是我的同事有一个JRE版本jre1.8.0\u 20。因此,当我的应用程序在他的系统中运行时,它会抛出一个 java.lang.UnsupportedClassVersionError Unsupported major.minor version 52.0 如果我在构建应用程序时将JDK compliance设置为1.7,它显然可以正常工作。但是我不想仅仅因为一个小的版本不匹配就失去J

我的JDK版本是jdk1.8.0_45,我在eclipse中使用默认的JDK合规性设置构建了一个应用程序

但是我的同事有一个JRE版本jre1.8.0\u 20。因此,当我的应用程序在他的系统中运行时,它会抛出一个

java.lang.UnsupportedClassVersionError Unsupported major.minor version 52.0
如果我在构建应用程序时将JDK compliance设置为1.7,它显然可以正常工作。但是我不想仅仅因为一个小的版本不匹配就失去JDK 8的所有特性

在eclipse中,我无法设置次要版本的遵从性级别。可以设置它吗


或者Java forward是否与次要版本版本兼容??如果是这样的话,我相信这个错误显然不会发生。

Java以向后兼容而闻名,这意味着在旧jdk中构建的任何应用程序都将在新jdk中运行:

jdk1.6jdk1.7中构建应用程序在使用jdk1.8运行时将起作用;可悲的是,它不能反过来工作

次要版本被视为jdk的新版本,兼容性问题确实存在。

不可能


只需安装jdk1.8.0_20并在安装的JRE中选择它

您应该指定运行时“执行环境”版本依赖项,而不是特定的java版本

对于插件,在manifest.mf中指定执行环境:JavaSE-1.8

对于普通java项目,在“构建路径…->配置构建路径”中,转到“库”,然后选择“添加库”、“JRE系统库”、“执行环境”并选择JavaSE-1.8。 删除路径上的任何其他JRE

这意味着对eclipse来说,找到一个Java>=1.8兼容的JRE

  • 下载JRE 1.8.020

  • 然后将JRE 1.8.0\u20指定给Eclipse IDE,如下所示:

  • 然后重新构建应用程序

  • (您的问题不是bug:)

    根据版本52.0,JDK-8。似乎这是一个根据JDK编译到.class文件中的数字。JDK-7有51个,JDK-6有50个等等

    我要声明的是,在你的collegue机器上执行时没有使用JDK/JRE 8


    试着在你的同事电脑上运行
    java-XshowSettings
    ,检查行
    java.class.version
    -如果它是JDK 7,它将显示
    java.class.version=51.0

    只有当你有重大的版本更改,如从6到7或从7到8时,才会发生错误。如果你有轻微的版本更改,它不会发生有。错误52用于在JRE7中运行JDK8代码。因此,请仔细检查设置并将JRE8设置为运行时环境。

    我和我的同事在使用x32和x64版本的JDK时会遇到这种情况。他使用Mac,因此只有x64可用(对于Java8),我使用M$,两个版本都有。我们必须在64位版本上开发,否则我们会看到与您相同的错误…

    您可以

    (a)在您的系统上安装1.8.0\u 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);
    }
    

    您可以尝试使用-target编译器标志,告诉它生成将在较旧的(目标)JVM上运行的代码,-source编译器标志告诉它只接受较旧JVM的语言特性。请注意,根据您的代码使用的Java语言特性,这并不总是有效的。。。如果你看我的问题,JDK和JRE都是1.8版。。。唯一的区别是最后一个版本的部分。如果我在
    -source
    选项中给出这个选项,那么它给出的是无效的源代码发布选项:1.8.0\u 45这很奇怪我已经在eclipse中使用默认的JDK遵从性设置构建了一个应用程序`那是哪个版本?您确定您的同事正在使用jre8吗?你检查了
    java-version
    的输出了吗?@Paizo,我的JDK是
    1.8.0\u 45
    ,我同事的版本是
    1.8.0\u 20
    。我已经指定了问题中的所有信息……也有可能您的同事在eclipse中安装并配置了几个JRE(签入“Window->Preferences->Java->installed JRE”),其中一些较旧,他的机器上的默认JRE设置实际上是OP得到了一个java.lang.UnsupportedClassVersionError(而不是某种Eclipse异常)支持这个答案。指向java bug的好链接。但你的答案解决不了问题。如果他的同事真的在使用JRE 1.8.020,它不会抛出这个异常。根据您的链接:“这个问题似乎是由使用Java 1.8 jfxrt.jar运行Eclipse Java 1.7引起的。”这很有趣,也很奇怪,因为除非您有本机代码(JNI/JNA访问或为特定arcitechture编译的机器代码),否则Java代码在32位和64位JVM中同样可以运行。是的,我们的工作导师也无法告诉您。不久前(大约6个月前)我们遇到了这个问题。我们确实使用了第三方库(仅在x32模式下可用),但我们不止一次看到了此错误消息。MacOSX只允许x64 Java(捆绑除外),stoneage的库只允许x32,这在当时是一个混乱的局面,毕竟我们设法运行了它,尽管我们不得不发布一个指南,指导人们如何启动它:)