-1

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

使用 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)

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

4

1 回答 1

4

错误:使用 --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。

于 2021-04-19T15:56:58.480 回答