Java 在JDK Compliance eclipse中指定次要版本
我的JDK版本是jdk1.8.0_45,我在eclipse中使用默认的JDK合规性设置构建了一个应用程序 但是我的同事有一个JRE版本jre1.8.0\u 20。因此,当我的应用程序在他的系统中运行时,它会抛出一个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
java.lang.UnsupportedClassVersionError Unsupported major.minor version 52.0
如果我在构建应用程序时将JDK compliance设置为1.7,它显然可以正常工作。但是我不想仅仅因为一个小的版本不匹配就失去JDK 8的所有特性
在eclipse中,我无法设置次要版本的遵从性级别。可以设置它吗
或者Java forward是否与次要版本版本兼容??如果是这样的话,我相信这个错误显然不会发生。Java以向后兼容而闻名,这意味着在旧jdk中构建的任何应用程序都将在新jdk中运行: 在jdk1.6或jdk1.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
试着在你的同事电脑上运行
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,这在当时是一个混乱的局面,毕竟我们设法运行了它,尽管我们不得不发布一个指南,指导人们如何启动它:)