代码之家  ›  专栏  ›  技术社区  ›  davidxxx

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

  •  1
  • davidxxx  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  9
  •   davidxxx    5 年前

    实际上,支持的值取决于使用的主要JDK版本。
    你可以在网上找到这些信息 javac 各主要JDK版本的文档(链接如下)。

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

    • 这个 source 还有 target Maven配置中的版本不应优于使用的JDK版本。
      较旧版本的JDK无法用较新版本编译,因为它不知道自己的规范。

    • 注意:虽然最近的JDK可以接受 来源 编译旧的Java版本,并不意味着可以选择 来源 任何受支持的最新版本和 目标 任何记录为受支持的旧版本(见下文)。
      事实上,Java版本可能会引入一些新特性,这些特性在编译时/运行时并不与旧的Java版本兼容。
      例如,JDK 11可以用8作为编译类 来源 编译器版本。同时选择8作为 目标 编译版本,编译将通过。
      但是如果你改变主意,想用11作为 来源 8个作为 目标 ,编译将失败。
      javac文档中并不总是明确记录这一点。

    • 这个 release 参数存在于Java9中。

    • 作为 来源 还有 目标 都是一样的 释放 争论应该优先于辩论 来源 目标 。它的指定时间更短,并且确保了更好的交叉编译兼容性,而且不管怎样,即使不进行交叉编译,也不会有任何影响。
      有关更多解释,请参阅 this excellent answer .

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

    For Java 7

    • 支持 来源 :

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

    • 支持 目标 :

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

    For Java 8

    • 支持 来源 :

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

    • 支持 目标 :

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

    For Java 9

    • 支持 来源 :

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

    • 支持 目标 :

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

    • 支持 释放 :

    6、7、8和9。

    For Java 10

    • 支持 来源 :

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

    • 支持 目标 :

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

    • 支持 释放 :

    6、7、8、9和10。

    For Java 11

    • 支持 source/target/release :

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

    你可以在这里了解更多细节 the javac documentation for JDK 1.8 , JDK 9 , JDK 10 JDK 11