IntelliJ - Invalid source release: 17
Asked Answered
G

17

189

I've created a new Java project in IntelliJ with Gradle that uses Java 17. When running my app it has the error Cause: error: invalid source release: 17.

My Settings

I've installed openjdk-17 through IntelliJ and set it as my Project SDK.

The Project language level has been set to 17 - Sealed types, always-strict floating-point semantics.

enter image description here

In Modules -> Sources I've set the Language level to Project default (17 - Sealed types, always strict floating-point semantics).

modules->sources

In Modules -> Dependencies I've set the Module SDK to Project SDK openjdk-17.

modules->dependencies

In Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler I've set the Project bytecode version to 17.

enter image description here

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

I've looked at all of the answers here but I can't seem to fix this. I must be missing something but I can't find it. I've not had any problems using Java 8 or 11.

How do I resolve this?

Gadroon answered 24/10, 2021 at 11:32 Comment(0)
A
425

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

Acrolith answered 3/12, 2021 at 13:28 Comment(7)
Menu "IntelliJ Idea -> Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle" in macOSDeduction
There is the menu, but no selectable field for project and Gradle JVM in the menu :( (Windows10 x64, Intellij 2021.3.1 Ultimate)Sitar
How can I bookmark this? I always need to come back to this.Spumescent
You might also want to change the project SDK from File -> Project Structure (⌘;) -> Project Settings -> Project -> SDK. Otherwise, you might get java.lang.UnsupportedClassVersionErrorVachel
It worked for thanks! (mac intellij idea env)Stefanistefania
This is outdatedGilbertgilberta
In AS 2022.1.1 the options are not there, only project structure allows selecting JVM. However it's in AS 2023.2.1...Studbook
S
59

A picture is worth a thousand words!

Go to preferences and change Gradle JVM.

enter image description here

Spumescent answered 6/7, 2022 at 21:48 Comment(1)
In AS 2022.1.1 the project options are not there, only project structure allows selecting JVM. However it's in AS 2023.2.1...Studbook
W
42

Set Gradle JVM to target build jvm

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

Windlass answered 15/3, 2022 at 8:48 Comment(1)
This path is no longer valid. You have to go to preferences and then GradleSpumescent
P
31

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)
    }
}
Poirier answered 24/10, 2021 at 11:47 Comment(10)
I've set the Java home to the openjdk installed by IntelliJ. echo %JAVA_HOME% C:\Users\Michael\.jdks\openjdk-17.0.1. I've then restarted IntelliJ, Added the targetCompatibility as 17 and rerun gradle. When executing my app I still get the error.Gadroon
As another thing to note. If I set it to use Java 11 and leave my JAVA_HOME pointing at 17, it works fine. There seems to be something different that it's not liking.Gadroon
How are you launching the application? Did you run the echo %JAVA_HOME% command from within the IntelliJ IDEA inclosed terminal or a separate terminal application (cmd / powershell...)?Poirier
I'm running a main method from within IntelliJ. If I run echo %JAVA_HOME% it outputs %JAVA_HOME% in the IntelliJ terminal. In cmd it outputs the correct Java 17 directory. If I set the source compatability to 11 and use the Java 17 JDK it works correctly so it is finding the JDK fine.Gadroon
You may need to add the toolchain configuration to avoid having Gradle using its default one (this may be why it succeeds when setting the sourceCompatibility to 11)Poirier
That is exactly it. Thank you!Gadroon
You save my 2 hours. I'm using windows and the command set JAVA_HOME=~ not working for me. So I changed system variable directly using windows control panel and everything works perfect.Sitar
For IntelliJ Users: Go to Settings -> Build, Execution, Deployment -> Build Tools -> Gradle and set the Gradle JVM to your desired java version.Newfeld
Thanks for adding toolchain to the answer as I had no control on Gradle's JVM in the Jenkins build pipeline.Heidy
toolchain worked for me.Turbit
R
5

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)
Rainout answered 17/3, 2022 at 13:16 Comment(0)
A
4

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

Appealing answered 24/8, 2022 at 20:2 Comment(1)
Welcome to SO! Please take a look at the other answers that were given before. Your approach is mentioned there already. In order to keep the site clear and make it easy to find answers, we try to avoid double answers.Scholz
C
2

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

Chivers answered 24/10, 2021 at 11:58 Comment(3)
I've done this and restarted IntelliJ. I still get the same error. If I echo the JAVA_HOME it looks correct. echo %JAVA_HOME% C:\Users\Michael\.jdks\openjdk-17.0.1Gadroon
docs.gradle.org/current/userguide/compatibility.html see this compatibility matrix make sure that you are using this . Try running it once on jdk 16 .Chivers
For MacOS, an example you could stick in your ~/.profile file: export JAVA_HOME=$(/usr/libexec/java_home)Bunion
M
2

Below process worked for me: File -> Project Structure -> Platform Settings -> SDKs -> jdk-17.0.5[for me](ADD JDK Required version either from disk or download it)

Marciano answered 4/4, 2023 at 9:35 Comment(0)
M
1

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

Moderator answered 25/10, 2021 at 8:47 Comment(0)
A
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)

Accessible answered 15/2, 2022 at 20:45 Comment(0)
T
1

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.

Tablecloth answered 26/2, 2022 at 10:30 Comment(2)
Check under Settings / Build, Execution... / Build Tools / Gradle. There should be a setting Gradle JVM: that needs to be consistent. For me this was used when I marked a task as "After Sync" in the gradle view. Even though the project is set to "Build and run using: IntelliJ" for the after sync task, it runs external Gradle.Solicitous
@ScottCarlson thanks but the settings in the IDE are generelly only affecting the run configurations of the IDE. If you enter some commands into a terminal (even that of the IDE) it will pick up the JDK that is set in the system environment variables of Windows, and not the JDK you've set in IntelliJ for your project.Lebar
F
1

Set to the (gradle) project config and commit. By saving this, you will help all your project contributors, in contrast to your local IDE Settings.

If you use build.gradle.kts

java {
  toolchain {
    languageVersion.set(JavaLanguageVersion.of(17))
  }
}

If you use build.gradle

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

as few other answers mentioned.

IntelliJ IDEA(⌘,) -> Gradle JVM (in search bar)

The global UI Settigs, as the accepted answer suggests, would also help. But be aware of the instability:

  1. It would still fail if you re-build with a terminal command ./gradlew assemble.
  2. The setting is global. So you would need to be back to it each time you switch between 11 and 17 projects.
  3. You would need to instruct each developer in the team to do the same UI exercise.
Feeler answered 1/8, 2023 at 23:56 Comment(0)
C
1

I was running into this problem on GitHub Actions, building an APK with flutter. I setup Java with a specific version:

    - uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: '17'
    - run: java --version

GitHub Actions was using version 11.

Caesura answered 2/4, 2024 at 20:41 Comment(0)
C
0

Had the same problem, tried everything said above but no luck.

Then saw this path C:\Program Files\Common Files\Oracle\Java\javapath present in Systesm variable path. Deleting it solved the issue.

Note: Don't forget to restart the terminal.

Courage answered 15/2, 2023 at 15:34 Comment(0)
T
0

If your project is using maven, go to Run > Edit Configurations.. > Maven & choose your maven project > checked 'Inherit from settings'

this solving my problem.

enter image description here

Thorfinn answered 9/5, 2023 at 2:31 Comment(0)
F
0

Verify that you are using the same JDK version to compile and run the program.

I also faced a similar problem. but changing the gradle JVM did not solve my problem. My problem was that two versions of JDK were installed in my system. the java command run with JDK 17 but the javac command run with JDK 11.

I deleted the JDK 11 and the problem was solved.

Forrestforrester answered 21/7, 2023 at 21:28 Comment(0)
S
0

reset the JDK to 17.0.4 in .bash_profile works for me.

Signally answered 19/9, 2023 at 7:4 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.