IntelliJ-无效的源代码版本: 17

我已经在 IntelliJ 中创建了一个新的 Java 项目,它使用了 Java17。当运行我的应用程序,它有错误 Cause: error: invalid source release: 17

我的设置

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

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

enter image description here

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

modules->sources

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

modules->dependencies

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

enter image description here

格拉德尔

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

我已经看了所有的答案 给你,但我似乎不能解决这个问题。我一定是遗漏了什么,但我找不到。我在使用 Java8或 Java11时没有遇到任何问题。

我该怎么解决这个问题?

80602 次浏览

The message typically entails that your JAVA_HOME environment variable points to a different Java version.

Here are the steps to follow:

  • Close IntelliJ IDEA
  • Open a terminal window and check your JAVA_HOME variable value:
    • *nix system: echo $JAVA_HOME
    • Windows system: echo %JAVA_HOME%
  • The JAVA_HOME path should be pointing to a different path, then set it to the openjdk-17 path:
    • *nix system: export JAVA_HOME=/path/to/openjdk-17
    • Windows system: set JAVA_HOME=path\to\openjdk-17
  • Open your project again in IntelliJ IDEA
  • Make sure to set both source and target compatibility versions (not only the sourceCompatibility)

You should be able to build your project.

EDIT: Gradle Toolchain

You may need also to instruct Gradle to use a different JVM than the one it uses itself by setting the Java plugin toolchain to your target version:

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

Set JAVA_ HOME TO JDK 17 and check this by Opening cmd -> javac. This should return the current version of java set in your machine

If you start your project from a main method directly invoked from Intelij then the missing dialog execution configurations may be the cause of the error.

Always check the execution configurations to make sure the correct JRE folder is plugged in. In latest versions of jdk there is not a specific jre folder but the complete jdk package, so make sure it points at this folder.

enter image description here

enter image description here

In intellij just set Gradle JVM to Java version 17.

"File -> Settings.. -> Build, Execution, Deployment -> Build Tools -> Gradle" there select your project and set Gradle JVM to your java 17.0.1

you can define org.gradle.java.home in ~/.gradle/gradle.properties like:

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

this will cover both gradle cli and default value for IntelliJ (if not specified otherwise)

(windows users file at C:\Users\<username>\.gradle\gradle.properties)

I was running into this issue, only when building from terminal, while the execution from the IntelliJ Run Configuration works

The reason is probably, that I had downloaded the JDK from the relatively new way of doing it directly from the IDE

enter image description here

My guess is, that this JDK with its path that is set here

enter image description here

Is only known to IntelliJ and likely dynamically passed to Gradle when running a run configuration, and not known to Gradle itself.

I tried to figure out what is happening, so I've added this task which in both cases prints the same path to an older local JDK.

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

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

Afterwards I've deleted the old JDK under that path and retried both, run configuration and terminal execution. Now the run configuration still works, while printing the same invalid JDK path, and the terminal execution fails with

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.

I had expected the error in both cases, but it seems the JAVA_HOME directory is not necessarily used and in some way other than with the env variable, IntelliJ has to tell Gradle to use the right JDK from the .jdks directory.

This is just an assumption, if anyone has an explanation I'd appreciate it, especially how Gradle is able to know what JDK to use.

Set Gradle JVM to target build jvm

File -> Settings.. ->enter image description here

There could be many reasons due to which this error is thrown by intellij

  • Check your JAVA_HOME ->
echo $JAVA_HOME

if JAVA_HOME is not correct, update the JAVA_HOME environment variable.

  • check if the project structure in IntelliJ is correct.
File > Project Structure > Project Setting > Project -> SDK and Language level should match


File > Project Structure > Project Setting > Modules -> Language Level should match with SDK
  • Check and fix settings in preferences are correct
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)

A picture is worth a thousand words!

Enter to preferences and change Gradle JVM.

enter image description here

in build.gradle set sourceCompatibility = '11' not sourceCompatibility = '17'