【问题标题】:IntelliJ - Invalid source release: 17IntelliJ - 无效的源版本:17
【发布时间】:2021-12-10 05:54:05
【问题描述】:

我在 IntelliJ 中使用使用 Java 17 的 Gradle 创建了一个新 Java 项目。运行我的应用程序时出现错误 Cause: error: invalid source release: 17

我的设置

我已经安装了openjdk-17IntelliJ 并将其设置为我的Project SDK

Project language level 已设置为 17 - Sealed types, always-strict floating-point semantics

Modules -> Sources 中,我已将Language level 设置为Project default (17 - Sealed types, always strict floating-point semantics)

Modules -> Dependencies 中,我已将Module SDK 设置为Project SDK openjdk-17

Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler 中,我已将Project bytecode version 设置为17

Gradle

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
}

test {
    useJUnitPlatform()
}

我查看了所有答案here,但我似乎无法解决这个问题。我一定错过了什么,但我找不到。我在使用 Java 8 或 11 时没有遇到任何问题。

我该如何解决这个问题?

【问题讨论】:

    标签: java gradle intellij-idea java-17


    【解决方案1】:

    该消息通常表明您的 JAVA_HOME 环境变量指向不同的 Java 版本。

    以下是要遵循的步骤:

    • 关闭 IntelliJ IDEA
    • 打开一个终端窗口并检查您的 JAVA_HOME 变量值:
      • *nix 系统:echo $JAVA_HOME
      • Windows系统:echo %JAVA_HOME%
    • JAVA_HOME 路径应该指向不同的路径,然后将其设置为 openjdk-17 路径:
      • *nix 系统:export JAVA_HOME=/path/to/openjdk-17
      • Windows系统:set JAVA_HOME=path\to\openjdk-17
    • IntelliJ IDEA 中再次打开您的项目
    • 确保同时设置 sourcetarget 兼容版本(不仅仅是sourceCompatibility

    您应该能够构建您的项目。

    编辑:Gradle 工具链

    您可能还需要通过将 Java 插件工具链设置为您的目标版本:

    // build.gradle
    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }
    

    【讨论】:

    • 我已将 Java 主页设置为 IntelliJ 安装的 openjdk。 echo %JAVA_HOME%C:\Users\Michael\.jdks\openjdk-17.0.1。然后我重新启动了 IntelliJ,将 targetCompatibility 添加为 17 并重新运行 gradle。执行我的应用程序时,我仍然收到错误消息。
    • 还有一点需要注意。如果我将它设置为使用 Java 11 并让我的 JAVA_HOME 指向 17,它可以正常工作。似乎有一些不一样的东西它不喜欢。
    • 你是如何启动应用程序的?您是从 IntelliJ IDEA 封闭终端还是单独的终端应用程序(cmd / powershell...)中运行echo %JAVA_HOME% 命令?
    • 我正在 IntelliJ 中运行一个主要方法。如果我运行echo %JAVA_HOME%,它会在 IntelliJ 终端中输出%JAVA_HOME%。在 cmd 中,它输出正确的 Java 17 目录。如果我将源兼容性设置为 11 并使用 Java 17 JDK,它可以正常工作,因此可以找到 JDK。
    • 您可能需要添加 toolchain 配置以避免让 Gradle 使用其默认配置(这可能是在将 sourceCompatibility 设置为 11 时成功的原因)
    【解决方案2】:

    将 JAVA_HOME 设置为 JDK 17 并通过打开 cmd -> javac 进行检查。这应该返回您机器中设置的当前 java 版本

    【讨论】:

    • 我已经完成了这个并重新启动了 IntelliJ。我仍然得到同样的错误。如果我回显JAVA_HOME,它看起来是正确的。 echo %JAVA_HOME% C:\Users\Michael\.jdks\openjdk-17.0.1
    • docs.gradle.org/current/userguide/compatibility.html 请参阅此兼容性矩阵,确保您正在使用此 .尝试在 jdk 16 上运行一次。
    【解决方案3】:

    如果您从直接从 Intelij 调用的 main 方法启动项目,则缺少对话框执行配置可能是导致错误的原因。

    始终检查执行配置以确保插入了正确的 JRE 文件夹。在最新版本的 jdk 中,没有特定的 jre 文件夹,而是完整的 jdk 包,因此请确保它指向此文件夹。

    【讨论】:

      【解决方案4】:

      在 intellij 中,只需将 Gradle JVM 设置为 Java 版本 17。

      “文件 -> 设置.. -> 构建、执行、部署 -> 构建工具 -> Gradle” 在那里选择您的项目并将 Gradle JVM 设置为您的 java 17.0.1

      【讨论】:

      • macOS 中的菜单“IntelliJ Idea -> 首选项 -> 构建、执行、部署 -> 构建工具 -> Gradle”
      • 有菜单,但菜单中没有项目和Gradle JVM的可选字段:((Windows10 x64, Intellij 2021.3.1 Ultimate)
      猜你喜欢
      • 2017-04-02
      • 2018-02-27
      • 2022-01-02
      • 2021-07-23
      • 2019-06-06
      • 2014-11-10
      • 2019-06-05
      相关资源
      最近更新 更多