如何编译支持旧版Java的.java?

时间:2012-07-06 15:02:59

标签: java compilation cross-platform

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

6 个答案:

答案 0 :(得分:18)

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

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

交叉编译示例

这里我们使用javac来编译将在1.4 VM上运行的代码。

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

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

-source release

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

答案 1 :(得分:9)

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

javac --release N ...

相当于

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

-source 1.5

答案 5 :(得分:0)

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

javac -source 1.8 -target 1.8  *.java