定位不同版本的JRE

时间:2014-05-13 09:34:09

标签: java compilation version javac

我在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。

3 个答案:

答案 0 :(得分:7)

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

{{1}}

javac(JDK 8)的文档是here

javac(JDK 9)的文档是here

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

答案 1 :(得分:2)

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

enter image description here

答案 2 :(得分:0)

在错误消息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