【问题标题】:How to remove --enable-preview in Java 16?如何在 Java 16 中删除 --enable-preview?
【发布时间】:2021-07-13 18:31:39
【问题描述】:

为了在 JDK 15 中使用记录,我曾经在我的 Ant 构建中使用传递给 javac 的参数 --enable-preview --release 15 进行编译。一切都编译并运行良好。

使用 JDK 16 时,如果我使用相同的参数进行编译,我会得到

错误:带有 --enable-preview 的无效源版本 15(预览 语言功能仅支持 16 版)

记录是 JDK 16 的标准功能,所以我希望在没有这些参数的情况下进行编译。但是,如果我删除它们,我会得到

Foo.class 使用 Java SE 15 的预览功能。(使用 --enable-preview 允许加载包含预览功能的类文件)

并且Ant报告编译失败:

编译失败;有关详细信息,请参阅编译器错误输出。在 org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1425)

因此,带有标志和没有标志的编译失败。怎么了?

【问题讨论】:

  • "error: invalid source release 15 with --enable-preview (preview language features are only supported for release 16)" 不确定 ant 但您正在尝试使用 Java 16 编译器编译此类与--enable-preview --release 15。使用 Java 16 时,您可以直接在不使用 --enable-preview 的情况下执行此操作。仅在使用 Java 15 时才需要这些参数。但是,如果您想使用 Java 16 预览功能,请执行 javac --enable-preview --release 16 ...

标签: java ant javac java-16 preview-feature


【解决方案1】:

错误:带有 --enable-preview 的无效源版本 15(预览 语言功能仅支持 16 版)

由于您使用的是 JDK-16,因此您必须使用 16 作为 --release 的值(通常用于 JDK-16 中作为预览功能提供的任何功能)。因此,以下内容将为您工作:

javac --enable-preview --release 16 MyClass.java

但是,record 是 Java-16 中的标准功能,因此您无需使用 --enable-preview 参数编译代码。您可以在不使用此参数的情况下编译代码,即

javac MyClass.java

Foo.class 使用 Java SE 15 的预览功能。(使用 --enable-preview 允许加载包含预览功能的类文件)

这不是编译时错误。当您尝试直接运行使用--enable-preview 参数编译的.java 类时,您会得到它。你可以运行它

java --enable-preview MyClass

编译失败;有关详细信息,请参阅编译器错误输出。在 org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1425)

您需要更新您的 JAVA_HOME 设置以指向 JDK-16,以便 ant 使用 JDK-16。

【讨论】:

  • 顺便说一下,Java 16 在其第二个预览版中提供了sealed classes 功能。因此,如果您想尝试该功能,则需要启用正确答案中讨论的预览模式,但适用于 Java 16 而不是 Java 15。
  • 但是为什么 Ant 说“编译失败”并且在使用 JDK 15 编译时没有这样说呢?
  • @ARX - 您需要将 JAVA_HOME 设置更新为 JDK-16。我错过了在我之前的回答中提到它。我已经更新了答案以将其合并。
猜你喜欢
  • 2020-09-18
  • 2020-01-21
  • 1970-01-01
  • 2023-03-28
  • 2020-09-03
  • 2023-02-08
  • 2017-10-11
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多