Ayush Surana
Ayush Surana

Reputation: 1926

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

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

Answers (12)

Piyush Singh
Piyush Singh

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

Mark Johnson
Mark Johnson

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

amitsriv99
amitsriv99

Reputation: 143

And don't forget to change JRE version appropriately in the Run As --> Run Configurations --> JRE tab in Eclipse IDE..

Run Configurations - JRE Settings

Upvotes: 1

Djacomo
Djacomo

Reputation: 525

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
  2. Create a .sdkmanrc file in your project main directory:

    java=11.0.11.hs-adpt
    
  3. 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

Kff7
Kff7

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

John Kitonyo
John Kitonyo

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

Mohit Singh
Mohit Singh

Reputation: 6187

  1. Check the Java home under path inside environment variables. It should point to JDK 11 under your Java installation directory,

  2. Check for the below inside file pom.xml

     <properties>
         <java.version>11</java.version>
     </properties>
    
  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

Upvotes: -3

Pierre C
Pierre C

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:

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

Upvotes: 8

AzezoLinux
AzezoLinux

Reputation: 35

Just change this

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

to

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

Upvotes: -7

Mercuriat
Mercuriat

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

Procrastinator
Procrastinator

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

thelearner
thelearner

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

Related Questions