IntelliJ - 无效的源版本:17
IntelliJ - Invalid source release: 17
我在 IntelliJ 中使用 Gradle 创建了一个新的 Java 项目,该项目使用 Java 17。当 运行 我的应用程序出现错误 Cause: error: invalid source release: 17
.
我的设置
我已经通过 IntelliJ
安装了 openjdk-17
并将其设置为我的 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()
}
我查看了所有答案 ,但我似乎无法解决这个问题。我一定是遗漏了什么,但我找不到。我在使用 Java 8 或 11 时没有遇到任何问题。
我该如何解决这个问题?
该消息通常意味着您的 JAVA_HOME 环境变量指向不同的 Java 版本。
以下是要遵循的步骤:
- 关闭IntelliJ IDEA
- 打开终端 window 并检查您的 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
中再次打开您的项目
- 确保同时设置 source 和 target 兼容版本(不仅是
sourceCompatibility
)
您应该能够构建您的项目。
编辑:Gradle 工具链
您可能还需要通过设置Java 插件工具链到您的目标版本:
// build.gradle
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
将 JAVA_HOME 设置为 JDK 17 并通过打开 cmd -> [=12c.这应该 return 当前版本 java 在您的机器中设置
如果您从直接从 Intelij 调用的 main 方法启动项目,则缺少对话框执行配置可能是错误的原因。
始终检查执行配置以确保插入正确的 JRE 文件夹。在最新版本的 jdk 中没有特定的 jre 文件夹,而是完整的 jdk 包,因此请确保它指向这个文件夹。
在 intellij 中只需将 Gradle JVM 设置为 Java 版本 17。
“文件 -> 设置.. -> 构建、执行、部署 -> 构建工具 -> Gradle”
那里 select 你的项目并将 Gradle JVM 设置为你的 java 17.0.1
您可以在 ~/.gradle/gradle.properties
中定义 org.gradle.java.home
,例如:
org.gradle.java.home=/path/to/jdk17
这将涵盖 gradle
IntelliJ 的 cli 和默认值(如果没有另外指定)
(windows 用户文件位于 C:\Users\<username>\.gradle\gradle.properties
)
我 运行 正在解决这个问题,仅当从终端构建时 ,而 从 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路径,并且终端执行失败
ERROR: JAVA_HOME is set to an invalid directory: C:\Program
Files\GraalVM\graalvm-ce-java11-21.1.0
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
我在这两种情况下都预料到了错误,但似乎 JAVA_HOME 目录 不一定使用 并且在某种程度上不同于 env 变量,IntelliJ必须告诉 Gradle 使用 .jdks 目录 .
中的权利 JDK
这只是一个假设,如果有人有解释,我将不胜感激,尤其是 Gradle 是如何知道 JDK 使用什么的。
将 Gradle JVM 设置为目标构建 jvm
文件 -> 设置.. ->
intellij 抛出此错误的原因可能有很多
- 检查你的 JAVA_HOME ->
echo $JAVA_HOME
如果 JAVA_HOME 不正确,请更新 JAVA_HOME 环境变量。
- 检查IntelliJ中的项目结构是否正确。
File > Project Structure > Project Setting > Project -> SDK and Language level should match
File > Project Structure > Project Setting > Modules -> Language Level should match with SDK
- 检查并修复首选项中的设置是否正确
Preferences > Build, Execution and Deployment > Gradle > Gradle JVM should match with SDK (Preferences > Build, Execution and Deployment > maven if you're using maven)
Preferences > Build, Execution and Deployment > Compiler > Java Compiler > Project Bytecode version (this should match with your SDK as well)
我在 IntelliJ 中使用 Gradle 创建了一个新的 Java 项目,该项目使用 Java 17。当 运行 我的应用程序出现错误 Cause: error: invalid source release: 17
.
我的设置
我已经通过 IntelliJ
安装了 openjdk-17
并将其设置为我的 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()
}
我查看了所有答案
我该如何解决这个问题?
该消息通常意味着您的 JAVA_HOME 环境变量指向不同的 Java 版本。
以下是要遵循的步骤:
- 关闭IntelliJ IDEA
- 打开终端 window 并检查您的 JAVA_HOME 变量值:
- *nix 系统:
echo $JAVA_HOME
- Windows系统:
echo %JAVA_HOME%
- *nix 系统:
- JAVA_HOME路径应该指向不同的路径,然后将其设置为openjdk-17路径:
- *nix 系统:
export JAVA_HOME=/path/to/openjdk-17
- Windows系统:
set JAVA_HOME=path\to\openjdk-17
- *nix 系统:
- 在 IntelliJ IDEA 中再次打开您的项目
- 确保同时设置 source 和 target 兼容版本(不仅是
sourceCompatibility
)
您应该能够构建您的项目。
编辑:Gradle 工具链
您可能还需要通过设置Java 插件工具链到您的目标版本:
// build.gradle
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
将 JAVA_HOME 设置为 JDK 17 并通过打开 cmd -> [=12c.这应该 return 当前版本 java 在您的机器中设置
如果您从直接从 Intelij 调用的 main 方法启动项目,则缺少对话框执行配置可能是错误的原因。
始终检查执行配置以确保插入正确的 JRE 文件夹。在最新版本的 jdk 中没有特定的 jre 文件夹,而是完整的 jdk 包,因此请确保它指向这个文件夹。
在 intellij 中只需将 Gradle JVM 设置为 Java 版本 17。
“文件 -> 设置.. -> 构建、执行、部署 -> 构建工具 -> Gradle” 那里 select 你的项目并将 Gradle JVM 设置为你的 java 17.0.1
您可以在 ~/.gradle/gradle.properties
中定义 org.gradle.java.home
,例如:
org.gradle.java.home=/path/to/jdk17
这将涵盖 gradle
IntelliJ 的 cli 和默认值(如果没有另外指定)
(windows 用户文件位于 C:\Users\<username>\.gradle\gradle.properties
)
我 运行 正在解决这个问题,仅当从终端构建时 ,而 从 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路径,并且终端执行失败
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\GraalVM\graalvm-ce-java11-21.1.0
Please set the JAVA_HOME variable in your environment to match the location of your Java installation.
我在这两种情况下都预料到了错误,但似乎 JAVA_HOME 目录 不一定使用 并且在某种程度上不同于 env 变量,IntelliJ必须告诉 Gradle 使用 .jdks 目录 .
中的权利 JDK这只是一个假设,如果有人有解释,我将不胜感激,尤其是 Gradle 是如何知道 JDK 使用什么的。
将 Gradle JVM 设置为目标构建 jvm
文件 -> 设置.. ->
intellij 抛出此错误的原因可能有很多
- 检查你的 JAVA_HOME ->
echo $JAVA_HOME
如果 JAVA_HOME 不正确,请更新 JAVA_HOME 环境变量。
- 检查IntelliJ中的项目结构是否正确。
File > Project Structure > Project Setting > Project -> SDK and Language level should match
File > Project Structure > Project Setting > Modules -> Language Level should match with SDK
- 检查并修复首选项中的设置是否正确
Preferences > Build, Execution and Deployment > Gradle > Gradle JVM should match with SDK (Preferences > Build, Execution and Deployment > maven if you're using maven)
Preferences > Build, Execution and Deployment > Compiler > Java Compiler > Project Bytecode version (this should match with your SDK as well)