使用Java 7编译Java 6而不安装Java 6

时间:2015-12-21 16:02:12

标签: java java-7

我的应用程序应该运行的目标系统使用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

但是,这也需要存在一个属于Java 6的rt.jar。有更简单的方法吗?

2 个答案:

答案 0 :(得分:7)

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

Java编译器可以以旧格式发出类文件,即使源是新格式(这些版本分别由-target-source指定)。因此,您不需要旧的编译器来定位旧的JVM。

但是,对Java API的更改有点难以解释。最简单的方法是使用您定位的Java版本的API进行编译(-bootclasspath)。当然,您可能会对使用较新的API感到自信,并跳过此步骤,但确保实际编译和测试旧运行时库的唯一方法就是。

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

顺便说一句,所有这些设置也可在Java IDE中使用。例如,在eclipse中,可以在项目的编译器设置中设置合规级别,并添加适当的" JRE系统库"到项目"构建路径":

enter image description here

答案 1 :(得分:0)

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

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

<强> UPDATE /校正:

在浏览了以下链接http://www.javaworld.com/article/2077388/core-java/what-version-is-your-java-code.html之后,很清楚为什么建议这样做,并且使用-bootstrap标志和-source和/或-target标志很重要。