带有 Java 14 的 IntelliJ 2020.1 中的“记录”预览功能在 Maven“安装”期间因编译器错误而失败,但以其他方式运行

Posted

技术标签:

【中文标题】带有 Java 14 的 IntelliJ 2020.1 中的“记录”预览功能在 Maven“安装”期间因编译器错误而失败,但以其他方式运行【英文标题】:"Records" preview feature in IntelliJ 2020.1 with Java 14 fails with compiler error during Maven `install`, but runs otherwise 【发布时间】:2020-08-11 18:10:40 【问题描述】:

我正在尝试将 Java 中的 JEP 359: Records (Preview) 功能与 IntelliJ 2020.1.1 RC 一起使用。

我定义了一个这样的类:

package work.basil.example;

import java.time.LocalTime;

public record LocalTimeRange(LocalTime start , LocalTime stop)


当我使用这个 LocalTimeRange 类在另一个类中运行 main 方法时,没问题。

当我做一个 Maven install 我得到这个错误:

错误:(6,8) java: 记录是预览功能,默认禁用。

➥ 如何帮助 Maven 完成其install 操作?

我使用了Maven Quickstart Archetype,版本 1.4。然后我编辑了 POM 以使用其各种依赖项的所有最新版本。


我有“项目结构”设置:

项目设置 > 项目 > 项目 SDK > 14

项目设置 > 项目 > 项目语言级别 > 14(预览) - 记录、模式、文本块

项目设置 > 模块 > 项目语言级别 > 14(预览) - 记录、模式、文本块

我有“偏好”设置:

构建、执行、部署 > 编译器 > Java 编译器 > 每模块字节码版本 > 目标字节码版本 > 14

运行这个 Java: openjdk 14.0.1 2020-04-14 OpenJDK 运行时环境 AdoptOpenJDK (build 14.0.1+7) OpenJDK 64-Bit Server VM AdoptOpenJDK(build 14.0.1+7,混合模式,共享)

使用:

IntelliJ IDEA 2020.1.1(终极版)

构建 #IU-201.7223.58,于 2020 年 4 月 26 日构建

订阅有效期至 2020 年 8 月 28 日

运行时版本:11.0.6+8-b765.40 x86_64

VM:JetBrains s.r.o 的 OpenJDK 64 位服务器 VM macOS 10.14.6

GC:ParNew、ConcurrentMarkSweep

内存:2200M

核心数:6

非捆绑插件:com.github.leomillon.uuidgenerator

【问题讨论】:

有没有办法让你"(use --enable-preview to enable records)"? @ElliottFrisch 那张票IDEA-237538 中的错误似乎确实是我的问题。我在该页面上添加了一条评论,记录了我的详细信息。感谢您提供该链接。 我暂时不打算升级。希望他们能解决问题。 @ElliottFrisch 奇怪的是,我的代码运行了。我可以实例化我的record 类,并调用它的方法。只有 Maven install 会抛出此错误。所以对于一个简单的小应用程序只是为了玩record,bug 不会咬人。仅对于需要 Maven 的复杂应用程序 install 是一个问题。 @ElliottFrisch 如果您回答您的评论,我会接受。 【参考方案1】:

这似乎是 IntelliJ 2020.1.1 RC build # 201 周围出现的新问题或错误。在 2020.1.1 的最终版本中具有相同的行为。

见票号 IDEA-237538,IntelliJ Build #IU-201.6668.121 no longer recognizes Java 14 records

解决方法:添加 <configuration> 元素

要使您的 Maven cleaninstall 成功完成,请将 <configuration> 元素添加到您的两个 POM 元素中,以标记 --enable-preview

改变这个:

            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.1</version>
            </plugin>

            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>3.0.0-M4</version>
            </plugin>

……到这个:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>14</release>
                    <compilerArgs>
                        <arg>--enable-preview</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
                <configuration>
                    <argLine>--enable-preview</argLine>
                </configuration>
            </plugin>

【讨论】:

基于编辑,与Compile and execute a JDK preview feature with Maven相关

以上是关于带有 Java 14 的 IntelliJ 2020.1 中的“记录”预览功能在 Maven“安装”期间因编译器错误而失败,但以其他方式运行的主要内容,如果未能解决你的问题,请参考以下文章

支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布

Java 1.8 和 IntelliJ IDEA 14 中的注解编译错误

如何使用IntelliJ IDEA 14创建基于Maven3的Java Web Project

使用IntelliJ IDEA 14和Maven创建java web项目

PlayFramework 2.4 和 IntelliJ 14

使用IntelliJ IDEA 14和Maven创建java web项目