java 编译:源、目标和发布支持的版本

dav*_*xxx 5 java compilation javac

我可能会为遗留项目做一些交叉编译,我注意到最近的 JDK 仅限于某些特定版本的source,targetreleaseJVM 参数。
如何获得这些参数的支持版本?

dav*_*xxx 7

实际上,支持的值取决于使用的主要 JDK 版本。
您可以javac在各个主要 JDK 版本的文档中找到相关信息(参考链接如下)。

关于这些论点的一些一般性说明:

  • Maven 配置中的sourcetarget版本不应优于使用的 JDK 版本。
    旧版本的 JDK 不能用更新的版本编译,因为它不知道它的规范。

  • 请注意:虽然最近的 JDK 可以接受source较旧的 Java 版本作为编译,但这并不意味着您可以选择source任何受支持的最新版本和target任何记录为受支持的旧版本(见下文)。
    实际上,Java 版本可能会引入新特性,这些特性在编译时/运行时与旧 Java 版本不兼容。
    例如,JDK 11 可以使用 8 作为source编译器版本编译类。通过选择 8 作为target编译器版本,编译将通过。
    但是,如果您改变主意并希望使用 11 assource和 8 as进行编译target,则编译将失败。
    这并不总是明确记录在 javac 文档中。

  • release参数存在于 Java 9。

  • 由于 thesource和 thetarget是相同的,这个release论点应该比sourceand更受青睐target。指定更短,它确保更好的交叉编译兼容性,即使您不进行交叉编译,也不会受到伤害。
    有关更多解释,请参阅此优秀答案

源/目标/发布支持的版本:

对于 Java 7

  • 支持source

1.3、1.4、1.5(也是 5)、1.6(也是 6)和 1.7(也是 7)。

  • 支持target

1.1、1.2、1.3、1.4、1.5(也是 5)、1.6(也是 6)和 1.7(也是 7)。

对于 Java 8

  • 支持source

1.3、1.4、1.5(也是 5)、1.6(也是 6)、1.7(也是 7)和 1.8(也是 8)。

  • 支持target

1.1、1.2、1.3、1.4、1.5(也是 5)、1.6(也是 6)、1.7(也是 7)和 1.8(也是 8)。

对于 Java 9

  • 支持source

1.6(也是 6)、1.7(也是 7)、1.8(也是 8)和 9。

  • 支持target

1.6(也是 6)、1.7(也是 7)、1.8(也是 8)和 9。

  • 支持release

6、7、8 和 9。

对于 Java 10

  • 支持source

1.6(也是 6)、1.7(也是 7)、1.8(也是 8)、9 和 10。

  • 支持target

1.6(亦为 6)、1.7(亦为 7)、1.8(亦为 8)、9 和 10。

  • 支持release

6、7、8、9 和 10。

对于 Java 11

  • 支持source/target/release

6、7、8、9、10 和 11。

您可以在JDK 1.8JDK 9JDK 10JDK 11的 javac 文档中了解更多详细信息