【问题标题】:Error:java: error: invalid source release: 13 using JDK12 with IntelliJ错误:java:错误:无效的源版本:13 使用带有 IntelliJ 的 JDK12
【发布时间】:2019-06-06 22:58:15
【问题描述】:

我正在尝试使用 JDK-12 ea 构建一个项目。 在尝试执行示例类时:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int value = scanner.nextInt();
    // After JEP-325
    switch (value) {
        case 1 ->System.out.println("one");
        case 2 ->System.out.println("two");
        default ->System.out.println("many");
    }
} 

IDE 抛出读取的错误

错误:java:错误:无效的源版本:13

相关项目配置屏幕:

模块设置

SDK

编译器设置

关于 IDE:

IntelliJ IDEA 2018.3.3 (Community Edition)
Build #IC-183.5153.38, built on January 9, 2019
JRE: 1.8.0_152-release-1343-b26 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6

尝试将语言级别切换回 12,没有实验性功能,但它以

我记得最近成功使用了实验性功能(不确定确切的 IntelliJ 版本)。除了这个,我还需要配置一些东西吗?

【问题讨论】:

  • 我猜实验功能使用 --source 13 ?您是否尝试过使用 --enable-preview 标志?
  • "12 (preview)" 语言级别 ...是的,现在 IntelliJ 似乎缺少我。添加编译器级别标志确实有效。 (您可以将其作为答案)但这与 IntelliJ 声明的错误无关,甚至与针对java 而不是javac 显示的实际错误无关!
  • intellij 中的错误似乎来自javac。如果我在“消息”中选择“12(预览版)”作为语言级别,我在最后两行看到“...编译完成,出现 1 个错误...”,“错误:java:错误:发布版本 12 不是支持”,并且该错误与我在将--release 12 与 javac 一起使用时得到的错误相同。 intellij 说“java”是在谈论我猜想使用的语言......另外,我不知道为什么你没有“12(预览版)”作为语言级别,因为你似乎有更新版本的 intellij比我...
  • @JornVernee 是的,它(错误)用于在“java”中编译源代码。是的,我有最新的 IntelliJ。
  • FWIW 我更新到 2018.3.3 并且“12(预览)”语言级别已被删除,但在选择“12”时我被要求接受预览许可证。我猜他们宁愿让用户手动指定--enable-preview 标志。

标签: java intellij-idea java-12 preview-feature


【解决方案1】:

假设您面临的 SpringBoot 项目的问题是 pom.xml 中提到的依赖项(Maven 依赖项)。执行以下操作。

  1. 使用 cmd 或终端命令检查您机器的 jdk 版本:java -version。
  2. 在您的 pom.xml 中,更新 java 版本

保存更改,一切顺利。

【讨论】:

    【解决方案2】:

    仅作记录。我遇到了类似的错误,但使用的是 Java 14:

    Error:java: error: invalid source release: 14
    

    对我来说解决问题的方法是寻找 IDE 的每个地方,其中提到了另一个 Java 版本,但不是第 14 个。

    我不得不改变的地方是:

    文件->项目结构->项目设置

    文件 -> 项目结构 -> 模块设置 -> 选项卡:来源:语言级别。

    文件 -> 项目结构 -> 模块设置 -> 选项卡:依赖项:模块 SDK。

    文件 -> 设置 -> 编译器 -> Java 编译器 -> 目标字节码版本。

    【讨论】:

    • 我在“文件 -> 设置 -> 编译器 -> Java 编译器 -> 目标字节码版本”中指定版本。有效
    • 我确实尝试过将 JDK 从版本 13 更改为 8,但是虽然我设置了所有选项,但我必须手动编辑文件 .idea/misc.xml 并正确设置 JDK 版本 languageLevel 属性:语言级别=“JDK_1_8”。只有 project-jdk-name 属性受 UI 设置影响。
    • 我在使用 jdk 16 时遇到了同样的问题。更改模块 SDK 为我解决了这个问题。
    【解决方案3】:

    正确的方式™

    IntelliJ 最早支持 switch 表达式的版本是 2019.1 版本,于 2019 年 3 月 27 日发布。您可以在这里获取:https://www.jetbrains.com/idea/download。当然,您还需要 JDK 12,并将其设置为您的项目 SDK。

    然后您可以将语言级别设置为:

    12 (Preview) - Switch expressions
    

    有了它,一切都应该正常了。

    如果没有,您可能需要检查一下您是否有;

    • 将项目语言级别以及模块语言级别设置为“12(预览版)”
    • 将应用程序运行配置中的执行 JRE 设置为 12(或默认值,即项目 SDK)。
    • 在 Settings -> 'Build, Execution, Deployment'/Compiler/Java Compiler 中设置正确的字节码版本。 (将此字段留空以匹配语言级别)

    手动配置--enable-preview(无智能感知)

    将我的评论变成答案。您可以通过以下方式将 --enable-preview 标志添加到 VM:

    运行 -> 编辑配置...

    然后从左侧的树形菜单中选择您的主类,并在“VM 选项”框中粘贴--enable-preview

    您可以通过以下方式对编译器执行相同操作:

    文件 -> 设置...

    然后在 Build, Execution, Deployment -> Compiler -> Java Compiler 下的树形菜单中,您可以将--enable-preview 放入“附加命令行参数”框:

    请注意,这样做之后智能感知可能仍然无法工作。我仍然在->s 下看到红色波浪线,并带有错误消息“意外令牌”。但是,当我单击运行按钮时,该类编译并运行得很好。

    【讨论】:

    • 如何防止 maven 将模块语言级别从 12(预览版)切换到 12。我在 maven-compiler-plugin 上有 compilerArgs --enable-preview。
    【解决方案4】:

    在 IDEA v2018.3.2 Preview 语言级别添加 --enable-preview 参数到命令行。在 v2018.3.3 中没有 12 Preview 级别,因此必须手动添加参数,正如您在评论中正确提到的那样。 实验性功能不添加任何编译参数。

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 2018-02-27
      • 2021-07-23
      • 2019-06-05
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      相关资源
      最近更新 更多