首页 > 解决方案 > java 编译:源、目标和发布支持的版本

问题描述

我可能会对遗留项目进行一些交叉编译,并且我注意到最近的 JDK 仅限于 . 和 JVM 参数的某些source特定target版本release
如何获得这些参数的支持版本?

标签: javacompilationjavac

解决方案


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

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

  • source和 Maven 配置中的版本target不应该优于使用的 JDK 版本。
    较旧版本的 JDK 无法与较新版本一起编译,因为它不知道其规范。

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

  • release论点存在于 Java 9 中。

  • 由于sourcetarget是相同的,因此该release论点应优先于sourcetarget。指定的时间更短,它确保了更好的交叉编译兼容性,即使你不进行交叉编译,它也不会受到伤害。
    有关更多解释,请参阅这个出色的答案

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

对于 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 文档中了解更多详细信息


推荐阅读