定位不同版本的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