我的应用程序应该运行的目标系统使用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然而,这也要求存在一个属于Java6的rt.jar,还有更简单的方法吗?
发布于 2015-12-21 16:19:18
新的Java版本通常会改变Java语言(源文件和类文件格式)和Java。
Java编译器可以发出旧格式的类文件,即使源是新格式(这些版本分别由-target和-source指定)。因此,您不需要旧的编译器来针对旧的JVM。
但是,对Java的更改更难解释。最简单的方法是使用您目标的Java (-bootclasspath)的API进行编译。当然,您可能会觉得自己没有使用更新的API,并跳过了这一步,但是确保实际使用旧运行时库并在其上进行测试是唯一的方法。
简而言之,虽然交叉编译很有帮助,因为可以在不同的Java版本中使用相同的源代码,但是您应该根据您想要使用的实际Java版本进行编译和测试,这确实需要旧的JRE (或JDK)。
顺便说一句,所有这些设置都可以在Java中使用。例如,在eclipse中,可以在项目的编译器设置中设置遵从级别,并将适当的"JRE系统库“添加到项目的”构建路径“中:

发布于 2015-12-21 16:19:46
以下命令应足以满足您的要求。‘'javac -source 1.6 -target 1.6 OldCode.java’
使用此命令,您将知道编译器应该生成与java 6兼容的类文件。任何特定于java 7的类文件都会导致编译错误。关于rt.jar,您不需要有特定于java6的版本。如前所述,上面的命令自动确保输出与java6兼容。
UPDATE/CORRECTION:
在浏览了下面的链接http://www.javaworld.com/article/2077388/core-java/what-version-is-your-java-code.html之后,很清楚为什么推荐使用-bootstrap标志以及-source和/或-target标志,这一点很重要。
https://stackoverflow.com/questions/34399752
复制相似问题