Reputation: 4383
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
.
In Modules -> Sources
I've set the Language level
to Project default (17 - Sealed types, always strict floating-point semantics)
.
In Modules -> Dependencies
I've set the Module SDK
to Project SDK openjdk-17
.
In Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
I've set the Project bytecode version
to 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()
}
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?
Upvotes: 211
Views: 238590
Reputation: 1
If you are facing above error
Go to Right Click on project->Module Settings->
and then come back and go to setting set your JDK which version you have given in module settings
Upvotes: 0
Reputation: 433
So, this might help someone out there. I experienced this and tried everything from the above. But what worked for me is delete all the entries in Add Content Root of "each" modules
Upvotes: 0
Reputation: 389
One of the above answers might work in your case. In my case, it didn't - purely because of my own ignorance.
I had hardcoded an older java home path a long time back in my local gradle properties file in ~/.gradle/gradle.properties
Removing that stale entry fixed my issue.
Upvotes: 1
Reputation: 14873
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.
Upvotes: 2
Reputation: 10970
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.
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
as few other answers mentioned.
The global UI Settigs, as the accepted answer suggests, would also help. But be aware of the instability:
./gradlew assemble
.Upvotes: 2
Reputation: 534
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.
Upvotes: 1
Reputation: 559
If your project is using maven, go to Run > Edit Configurations.. > Maven & choose your maven project > checked 'Inherit from settings'
this solving my problem.
Upvotes: 0
Reputation: 1790
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)
Upvotes: 2
Reputation: 2620
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.
Upvotes: 0
Reputation: 1879
A picture is worth a thousand words!
Go to preferences and change Gradle JVM.
Upvotes: 67
Reputation: 41
in build.gradle set sourceCompatibility = '11' not sourceCompatibility = '17'
Upvotes: 4
Reputation: 767
There could be many reasons due to which this error is thrown by intellij
echo $JAVA_HOME
if JAVA_HOME is not correct, update the JAVA_HOME environment variable.
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)
Upvotes: 6
Reputation: 17687
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
My guess is, that this JDK with its path that is set 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.
Upvotes: 1
Reputation: 1172
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
)
Upvotes: 2
Reputation: 4636
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
Upvotes: 462
Reputation: 19173
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.
Upvotes: 1
Reputation: 16374
The message typically entails that your JAVA_HOME environment variable points to a different Java version.
Here are the steps to follow:
echo $JAVA_HOME
echo %JAVA_HOME%
export JAVA_HOME=/path/to/openjdk-17
set JAVA_HOME=path\to\openjdk-17
sourceCompatibility
)You should be able to build your project.
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)
}
}
Upvotes: 32
Reputation: 21
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
Upvotes: 2