Reputation: 1926
I am trying to compile my project with Java 11.
When I try to run the application with Java 8 as the Java version in pom.xml, it works fine. But when I try to run it with Java 11, it throws an error.
Fatal error compiling: invalid target release: 11
I've tried to fix it in various ways, like changing the environment variable, updating the path, and pointing %JAVA_HOME% to Java 11.
The commands and their results as on my computer are as follows:
java -version
echo %JAVA_HOME%
Output:
java version "11.0.8" 2020-07-14 LTS
C:\Program Files\Java\jdk-11.0.8
I am using IntelliJ IDEA and have made the necessary changes as suggested in this tutorial.
My pom.xml file looks something like this:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<version>1</version>
<projectId>businessapplication-6963d</projectId>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
When I check the Maven version, it shows JDK 1.8 as the Java version:
mvn --version
Output:
Java version: 1.8.0_241, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_241\jre
How can I point Maven to Java 11? Or, if that is not the problem, how to solve this issue? I don't think that this question is a duplicate of invalid target release: 1.7, as I have already implemented the solutions provided in that thread.
Error after building the project:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project demo: Fatal error compiling: invalid target release: 11 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
The path environment variable is:
C:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\bin\Intel64;
C:\Program Files (x86)\Intel\iCLS Client\;
C:\Program Files\Intel\iCLS Client\;
C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\System32\OpenSSH\;
C:\Delhi 2.0\apache-maven-3.6.1\bin;
C:\Program Files\Java\jdk-11.0.8\bin;C:\Program Files\Intel\WiFi\bin\;
C:\Program Files\Common Files\Intel\WirelessCommon\;
C:\Program Files\Git\cmd;D:\Flutter\flutter\flutter\bin;
C:\Users\Infinity97\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin;
C:\Users\Infinity97\AppData\Local\Microsoft\WindowsApps;
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2\bin;
H:\apache-maven-3.6.3\bin;
C:\Program Files\PostgreSQL\12\bin;
C:\Program Files\PostgreSQL\12\lib;
C:\Program Files\Docker Toolbox
Upvotes: 104
Views: 271689
Reputation: 37
This what helped me:
<properties>
<java.version>8</java.version>
</properties>
The issue must be you are using 8 locally, but pointing to a different version in your pom.xml.
Upvotes: -6
Reputation: 341
I was having the same error when packaging using Maven from VSCode. I just needed to add the release
element to the mavin maven-compiler-plugin in the pom.xml like this:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
Thank you to Bing Chat to nail that one!
Upvotes: 0
Reputation: 143
And don't forget to change JRE version appropriately in the Run As --> Run Configurations --> JRE tab in Eclipse IDE..
Upvotes: 1
Reputation: 525
The fastest and the easiest way is to use SDKMAN https://sdkman.io/:
Install JDK 11 with:
sdk install 11.0.11.hs-adpt
sdk list java
for the list of available JDKCreate a .sdkmanrc file in your project main directory:
java=11.0.11.hs-adpt
Switch JDK
use sdk env
for switch to right JDK.
For automatic switch to the chosen jdk version, enable it in sdkman config file (~/.sdkman/etc/config
)
sdkman_auto_env=true
Upvotes: 0
Reputation: 89
I had the same problem even the correct Java version 11 and JAVA_HOME variable was set.
Switching to another Java vendor from AdoptOpenJDK to Corretto solved it.
You can use SDKMAN to change easily and quick between different Java versions and vendors. (the JAVA_HOME variable will set automatically correct by SDKMAN).
Install SDKMAN by:
curl -s "https://get.sdkman.io" | bash
Then enter in the terminal:
source "$HOME/.sdkman/bin/sdkman-init.sh"
To ensure installation was successful:
sdk version
Install Java 11:
sdk install java 11.0.13.8.1-amzn
sdk default java 11.0.13.8.1-amzn
To check the versions, runtime and vendor:
java --version
mvn -v
Upvotes: 0
Reputation: 2419
First run
/usr/libexec/java_home -V
This will list all the possible JAVA_HOME paths possible on your machine.
You have two options:
Add the line (project permanent)
JAVA_HOME="/path/to/obtained/from/command/lib"
in your maven.bat file, ideally right after the initial comments.
Run
export JAVA_HOME=/path/to/obtained/from/command/lib
Before running the mvnw command.
Upvotes: -2
Reputation: 6187
Check the Java home under path inside environment variables. It should point to JDK 11 under your Java installation directory,
Check for the below inside file pom.xml
<properties>
<java.version>11</java.version>
</properties>
Under Path, check the correct entry for %JAVA_HOME% environment variable and explicitly set JAVA_HOME=C:\tools\java\jdk11
Check, your mvn should not be overriding the Java version 11
Upvotes: -3
Reputation: 3478
If other people are having this same problem, but with Eclipse (I know OP was referring to IntelliJ IDEA), also check the JRE in use for Maven:
Upvotes: 8
Reputation: 35
Just change this
<properties>
<java.version>11</java.version>
</properties>
to
<properties>
<java.version>1.8</java.version>
</properties>
Upvotes: -7
Reputation: 450
I was experiencing this issue while trying to deploy a Spring Boot application to Heroku.
My JAVA_HOME was set correctly, but I was still receiving same error.
But then this worked for me:
In your pom.xml file, add or adapt to your own context:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Upvotes: 18
Reputation: 2674
It seems like you're having the JAVA_HOME
set in your mvn.bat
. It could be pointing to the older version of Java (i.e., 8 in your case).
set JAVA_HOME=C:\path\to\jdk11
. Try using it on the first line, before calling Maven.
Upvotes: 118
Reputation: 87
I was facing the same problem. Setting JAVA_HOME environment variable to the right JDK solved my problem.
java -version was showing the right version, but echo %JAVA_HOME% pointed to the wrong JDK. Fixing it, solved this issue for me.
Upvotes: 1