定位不同版本的JRE

我正在Windows Surface Pro上测试Java。 Surface Pro具有Java 7 Update 55,但没有安装JDK。

我使用javac从命令行在MacBook上编译了一个程序。 MacBook有Java 8 Update 5,它包含JDK(显然是因为我在MBP上编译)。

当我将程序从MackBook移动到Surface Pro时,我收到以下错误。 这里,“移动程序”意味着将两个*.class文件复制到新机器并尝试执行字节代码。

 java.lang.UnsupportedClassVersionError: HttpsTest : Unsupported major.minor version 52. 

尝试使用目标信息进行编译会导致:

 $ javac -target 1.7 HttpsTest.java SSLSocketFactoryEx.java javac: target release 1.7 conflicts with default source release 1.8 

javac -help没有列出任何控制已编译程序的版本信息的选项( target除外,它似乎不起作用)。

如何为JRE的低级版本编译源文件? 在这种情况下,我的目标是Java 8机器上的Java 7。

从命令行,将您的呼叫更改为:

 javac -source 1.7 -target 1.7 HttpsTest.java SSLSocketFactoryEx.java 

javac(适用于JDK 8)的文档就在这里 。

javac(适用于JDK 9)的文档就在这里 。

注意:在JDK 9中,-target替换为–release。

如果您使用的是eclipse,则可以在项目属性 – > Java编译器中设置编译器合规性级别。 因此,您的代码是针对所选Java版本编译的。 看这里:

在此处输入图像描述

在错误消息major.minor version 52. ,这里的数字52表示用于编译类的java版本

 Java SE 9 = 53 Java SE 8 = 52 Java SE 7 = 51 Java SE 6.0 = 50 Java SE 5.0 = 49 JDK 1.4 = 48 JDK 1.3 = 47 JDK 1.2 = 46 JDK 1.1 = 45 

因此,您安装的JRE的版本高于目标使用的-source ,其中包含您要在其中编译的版本号:

javac -source 1.7 -target 1.7 HttpsTest.java SSLSocketFactoryEx.java