【问题标题】:How do I compile a .java with support for older versions of Java?如何编译支持旧版 Java 的 .java?
【发布时间】:2012-07-07 01:31:29
【问题描述】:

我想将我的(几个).java 编译成一个.jar,至少与Java 1.6 和更新版本兼容,最好是Java 1.5 和更新版本的Java。 (我有Java 1.7.0_5)

【问题讨论】:

标签: java compilation cross-platform


【解决方案1】:

是的,您可以在编译时设置编译器的版本。并将你的java代码编译成旧版本的java。

来自 Oracle 文章: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html

交叉编译示例

这里我们使用 javac 编译将在 1.4 虚拟机上运行的代码。

% javac -target 1.4 -bootclasspath jdk1.4.2/lib/classes.zip \
             -extdirs "" OldCode.java

您可能还需要以下参数来设置表示代码的版本。

-source release

-指定接受的源代码版本。

【讨论】:

  • 不过从一开始就使用 Java 1.4 编译器可能更容易。
  • 似乎无法将-source 版本设置为高于-target 版本。 $javac abc/def/HelloDriver.java -source 1.7 -target 1.4javac: source release 1.7 requires target release 1.7
【解决方案2】:

从 JDK 9 开始,javac 支持交叉编译的新选项

javac --release N ...

相当于

javac -source N -target N –bootclasspath rtN.jar

【讨论】:

  • 使用 JDK 10 为 java 8 编译代码我运行了命令 javac --release 8 Main.java 结果在 java 8 上可以运行。
  • 不需要旧版本的 JDK,编译回版本 6 (JDK 10),并且仅从较新的平台提取 Unicode 版本。
  • Old 并不意味着不好,尤其是当new 意味着付费或有限功能时。同样与stable 和free 不兼容并不意味着好。
【解决方案3】:

您可以使用javac -target 1.5 <source files>。

如果您使用构建系统、Eclipse 或其他一些 IDE 来构建 jar,请指定哪个。

【讨论】:

  • 我有 netbeans,但我只能使用文本文件。我如何将它应用到目录中的所有 .java 中?
  • 使用 netbeans 右键单击​​您的项目,转到属性并从打开的对话框底部的下拉菜单中更改“源/二进制格式”
【解决方案4】:

您可以指定编译器的目标版本低于构建 java 版本(所有答案基本上都这么说)但您不应该:它非常混乱,因为它只有在您还提供实际目标版本的类库时才有效.如果你这样做,你最好只使用这个旧的 Java 版本来编译。更清洁,更少的设置。对于 Java 9,选项更好一些,但您仍然需要一个旧的 JDK 来存放 rt.jar。

您可以做的是在您的 ide 和开发周期中使用 -target/-bootclasspath 技巧来获得更快的编译器和更好的警告,但是 IT 和发布构建应该使用目标版本来完成。

【讨论】:

    【解决方案5】:

    您可以使用最新版本的 JDK 并将源级别设置为 1.5 - 只要您不使用 1.5 之后引入的类/方法,您应该可以使用 JVM 1.5 及更高版本的所有版本:

    -source 1.5

    【讨论】:

      【解决方案6】:

      以下命令将使用 java 版本 1.8 编译所有 java 类,因为默认情况下,您的代码由您拥有的最新版本编译。

      javac -source 1.8 -target 1.8  *.java
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多