【问题标题】:Target different version of JRE针对不同版本的 JRE
【发布时间】:2014-06-30 21:53:18
【问题描述】:

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

【问题讨论】:

    标签: java compilation version javac


    【解决方案1】:

    在命令行中,将调用更改为:

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

    javac(JDK 8)的文档是here

    javac(JDK 9)的文档是here

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

    【讨论】:

    • 感谢您的回答。
    • javac --release 7 Tmp.java 对于 javac 版本 9 ~ 11,--release 的可用编号为 7891011
    【解决方案2】:

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

    【讨论】:

    • @sunleo 我在另一篇文章中回答了你的问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多