5

我需要为大学使用 Java 6 编译我的源代码。我目前在我的 PC (Linux) 上安装了 Java 8 JDK。如何在 Java 6 中编译?

ps 我知道我将无法使用任何 Java 7 或 8 功能。

pps 我意识到使用 Java 8 JDK 可以很好地编译 Java 6 源代码,但是我发现在家编译时我不小心在我的程序中使用了 Java 6 后的特性。当我尝试在 uni 的实验室计算机上编译源代码时,我遇到了一堆错误。例如,无法将对象转换为原始类型。

4

3 回答 3

5

解决这个问题的方法是使用后面的 SDK 进行编译,并在编译时使用交叉编译选项

交叉编译选项

默认情况下,类是针对 javac 附带的平台的引导类和扩展类编译的。但是 javac 也支持交叉编译,其中类是针对不同 Java 平台实现的引导程序和扩展类进行编译的。交叉编译时使用 -bootclasspath 和 -extdirs 选项很重要。

-目标版本

生成以指定虚拟机版本为目标的类文件。类文件将在指定的目标和更高版本上运行,但不会在 JVM 的早期版本上运行。有效目标是 1.1、1.2、1.3、1.4、1.5(也是 5)、1.6(也是 6)、1.7(也是 7)和 1.8(也是 8)。

-target 选项的默认值取决于 -source 选项的值:

  • 如果未指定 -source 选项,则 -target 选项的值为 1.8
  • 如果 -source 选项为 1.2,则 -target 选项的值为 1.4
  • 如果 -source 选项为 1.3,则 -target 选项的值为 1.4
  • 如果 -source 选项为 1.5,则 -target 选项的值为 1.8
  • 如果 -source 选项为 1.6,则 -target 的值为选项 1.8
  • 如果 -source 选项为 1.7,则 -target 的值为选项 1.8
  • 对于 -source 选项的所有其他值,-target 选项的值就是 -source 选项的值。

-bootclasspath 引导类路径

针对指定的引导类集进行交叉编译。与用户类路径一样,引导类路径条目由冒号 (:) 分隔,可以是目录、JAR 档案或 ZIP 档案。

要完全正确地使用这些选项(即也使用该-bootclasspath选项),需要rt.jar目标版本的 JRE(不是 JDK)。

于 2015-09-15T05:26:13.177 回答
3

您可以使用以下内容进行编译

% javac -target 1.6 <whatever you want to compile>
于 2015-09-15T05:09:57.517 回答
-1

我有一个类似的问题,项目的一部分想要使用 Java 6,而项目的其余部分需要 Java 8。为此,您可以在一个终端窗口中更改 Java 版本。

要仅在一个终端窗口中更改 java 版本而不更改配置文件,请使用:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

于 2015-09-15T06:46:04.323 回答