16

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

我的设置

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

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

在此处输入图像描述

Modules -> Sources我设置Language levelProject default (17 - Sealed types, always strict floating-point semantics).

模块->源

Modules -> Dependencies我设置Module SDKProject SDK openjdk-17.

模块->依赖项

Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler我设置Project bytecode version17.

在此处输入图像描述

摇篮

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()
}

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

我该如何解决这个问题?

4

6 回答 6

51

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

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

于 2021-12-03T13:28:36.383 回答
8

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

以下是要遵循的步骤:

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

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

编辑:摇篮工具链

您可能还需要通过将Java插件工具链设置为您的目标版本来指示Gradle使用与其自身使用的不同的JVM :

// build.gradle
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}
于 2021-10-24T11:47:33.057 回答
1

您可以定义org.gradle.java.home如下 ~/.gradle/gradle.properties

org.gradle.java.home=/path/to/jdk17

这将涵盖gradleIntelliJ 的 cli 和默认值(如果未另行指定)

(Windows 用户文件位于C:\Users\<username>\.gradle\gradle.properties

于 2022-02-15T20:45:08.393 回答
0

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

于 2021-10-24T11:58:35.587 回答
0

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

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

在此处输入图像描述

在此处输入图像描述

于 2021-10-25T08:47:20.480 回答
0

我遇到了这个问题,只有在从终端构建时,而从 IntelliJ 运行配置的执行工作

原因可能是,我已经从相对较新的方式直接从 IDE 下载了 JDK

在此处输入图像描述

我的猜测是,这个 JDK 的路径设置在这里

在此处输入图像描述

只有 IntelliJ 知道,并且可能在运行运行配置时动态传递给 Gradle ,而Gradle 本身不知道

我试图弄清楚发生了什么,所以我添加了这个任务,它在两种情况下都会打印到旧本地 JDK 的相同路径。

tasks.build.doFirst {
    println "used jdk path: " + System.getenv('JAVA_HOME')
}

C:\Program Files\GraalVM\graalvm-ce-java11-21.1.0

之后我删除了该路径下的旧 JDK 并重试了运行配置和终端执行。现在运行配置仍然有效,同时打印相同的无效 JDK 路径,并且终端执行失败并显示

错误:JAVA_HOME 设置为无效目录:C:\Program Files\GraalVM\graalvm-ce-java11-21.1.0

请在您的环境中设置 JAVA_HOME 变量以匹配您的 Java 安装位置。

在这两种情况下我都预料到了错误,但似乎不一定使用JAVA_HOME 目录,并且除了使用 env 变量之外,IntelliJ 必须告诉 Gradle 使用.jdks 目录中的正确 JDK 。

这只是一个假设,如果有人有解释我会很感激,尤其是 Gradle 如何知道要使用什么 JDK。

于 2022-02-26T10:30:44.180 回答