使用 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 并且很重要旗帜。
我的应用程序应该 运行 的目标系统使用 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 并且很重要旗帜。