Maven is not using Java 11 - Fatal error compiling: invalid target release: 11

JavaSpringSpring BootMaven

Java Problem Overview


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
java version "11.0.8" 2020-07-14 LTS
> echo %JAVA_HOME%
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 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
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
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

Java Solutions


Solution 1 - Java

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.

Solution 2 - Java

Experiencing this issue while trying to deploy Spring Boot application to Heroku.

My JAVA_HOME was set correctly but was still receiving same error.

But then this worked for me:

In your pom.xml 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>

Solution 3 - Java

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:

  • Run configurations...
  • Select your Maven Build configuration
  • Click the JRE tab and choose the JRE version in accordance with your POM.

Solution 4 - Java

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.

Solution 5 - Java

I had he 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. (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

Solution 6 - Java

The fastest and the easiest way is to use SDKMAN https://sdkman.io/ :

  1. Install jdk 11 with:
sdk install 11.0.11.hs-adpt
  • sdk list java for the list of available jdk
  1. Create a .sdkmanrc file in your project main dir:
java=11.0.11.hs-adpt
  1. 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

Solution 7 - Java

For future time travellers. 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

Solution 8 - Java

  1. Check the java home under path inside environment variable, it should point to jdk 11 under your java installation directory,

  2. Check for the below inside pom.xml

    11

  3. Under Path check the correct entry for %JAVA_HOME% environment variable and explicitly set JAVA_HOME=C:\tools\java\jdk11

  4. check , your mvn should not be overriding the java version 11

Solution 9 - Java

just change this

<properties>
    <java.version>11</java.version>
</properties>

to

<properties>
    <java.version>1.8</java.version>
</properties>

Solution 10 - Java

this what helped me : changed from 11 to 8, works fine The issue must be you are using 8 locally but pointing to a different version in your pom.xml

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAyush SuranaView Question on Stackoverflow
Solution 1 - JavaprocrastinatorView Answer on Stackoverflow
Solution 2 - JavaMercuriatView Answer on Stackoverflow
Solution 3 - JavaPierre CView Answer on Stackoverflow
Solution 4 - JavathelearnerView Answer on Stackoverflow
Solution 5 - JavaKff7View Answer on Stackoverflow
Solution 6 - JavaDjacomoView Answer on Stackoverflow
Solution 7 - JavaJohn KitonyoView Answer on Stackoverflow
Solution 8 - JavaMohit SinghView Answer on Stackoverflow
Solution 9 - JavaAzezoLinuxView Answer on Stackoverflow
Solution 10 - JavaPiyush SinghView Answer on Stackoverflow