使用 Java 7 编译 Java 6 而无需安装 Java 6

Compiling for Java 6 using Java 7 without installing Java 6

我的应用程序应该 运行 的目标系统使用 Java 6. 在我的开发机器上,我有 Java 7. 我可以进行开发吗,无需下载 Java 6?

我在 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html 上找到了一个交叉编译的例子:

 javac -source 1.6 -target 1.6 -bootclasspath C:\jdk1.6.0\lib\rt.jar -extdirs "" OldCode.java

不过,这也需要一个rt.jar的存在,属于Java 6.有没有更简单的方法?

新 Java 版本通常同时更改 Java 语言(源和 class 文件格式)和 Java API。

Java 编译器可以生成 class 旧格式的文件,即使源文件是新格式(这些版本由 -target-source, 分别)。因此,您不需要旧的编译器来针对旧的 JVM。

但是,Java API 的变化有点难以解释。最简单的方法是使用目标 Java 版本 (-bootclasspath) 的 API 进行编译。当然,您可能会确信自己没有使用较新的 APIs,并跳过此步骤,但唯一可以确保的方法实际上是针对旧的运行时库进行编译和测试。

简而言之,虽然交叉编译有助于相同的源代码用于不同的 Java 版本,但您应该针对您打算使用的实际 Java 版本进行编译和测试,这确实需要旧的 JRE(或 JDK)。

顺便说一句,所有这些设置在 Java IDE 中也可用。例如,在eclipse中,可以在项目的编译器设置中设置合规级别,并在项目的"Build Path":

中添加适当的"JRE System Library"

下面的命令应该足以满足您的要求。 'javac -source 1.6 -target 1.6 OldCode.java'

使用此命令,您告诉编译器应生成与 java 6 兼容的 class 文件。任何特定的 java 7 都会导致编译错误。关于 rt.jar,你不需要有 java6 特定版本。如前所述,上述命令会自动确保输出与 java6 兼容。

UPDATE/CORRECTION:

在完成以下 link http://www.javaworld.com/article/2077388/core-java/what-version-is-your-java-code.html 后,很清楚为什么建议使用 -bootstrap 标志以及 -source and/or -target 并且很重要旗帜。