【问题标题】:java compilation : source, target and release supported versionsjava 编译:源、目标和发布支持的版本
【发布时间】:2019-01-12 12:50:23
【问题描述】:

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

【问题讨论】:

  • @Robin Topper 我同意它可能会更好。事实上,我刚刚创建这篇文章是为了减少变得臃肿的stackoverflow.com/questions/38882080/… 的长度。由于此信息不存在于任何 SO 问题中,并且我认为它很有用,因此我不想删除这些信息。
  • 如果你想让它成为一个正确的问题,你至少应该提到它与Maven有关。问题目前有点脆弱,似乎不适合答案
  • 它与Maven没有任何关系。最初的问题很广泛,Maven 只是 javac 的包装器。所以为了解释我不得不在 javac 中挖掘的东西。

标签: java compilation javac


【解决方案1】:

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

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

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

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

  • release 参数存在于 Java 9 中。

  • 由于sourcetarget 相同,因此release 参数应优先于sourcetarget。指定的时间更短,它确保了更好的交叉编译兼容性,即使您不进行交叉编译,它也不会受到伤害。
    更多解释请参考this excellent answer

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

For 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)。

For 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 个)。

For 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。

For 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。

For Java 11

  • 支持source/target/release

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

您可以在the javac documentation for JDK 1.8JDK 9JDK 10JDK 11 了解更多详情

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多