skip to Main Content

I am trying to build a maven project on centOS 8. I want maven to use Java version 15. When I run mvn package I get the following error:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile 
(default-compile) on project systembrett-backend: Fatal error compiling: invalid target release: 15 -> [Help 1]

So I suspect that maven is using the wrong Java version, because when i do mvn package -X for debug logs it start with:

Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_275, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"

so it looks like, maven is using Java version 1.8.
But mvn -version says:

Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 15.0.2, vendor: AdoptOpenJDK, runtime: /opt/jdk-15.0.2+7
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"

JAVA_HOME is /opt/jdk-15.0.2+7 and PATH is /opt/jdk-15.0.2+7/bin:/home/username/.local/bin:/home/username/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin.

I thought maven is choosing the java version by checking JAVA_HOME, but apparently it is using an other version for the build. Does anyone know how to tell maven the correct version?
Thanks!

2

Answers


  1. Following is a list of steps I use to troubleshoot this kind of issues:

    1. Linux usually works with alternatives to ensure proper default Java environment is used. Similar to:
    $ alternatives --config java
    
    There are 2 programs which provide 'java'.
    
      Selection    Command
    -----------------------------------------------
     + 1           java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.191-2.6.15.4.el7_5.x86_64/jre/bin/java)
    *  2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre/bin/java)
    

    Try also for javac as it may not be configured the same way:

    $ alternatives --config javac
    
    1. For your maven instance, JAVA_HOME should be enough.

    Your output of mvn -version testifies that you have configured it correctly. Remove your Java from your PATH to ensure JAVA_HOME and mvn will find the correct one.

    1. The pom.xml can also configure the required compiler, similar to:
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    1. Another thing may be that you’re not using the same ENV (different terminals may not have the same environment variables exported – I presume you being on CentOS, you already encountered this). You have to exit the terminal and get back in to allow the default variables to take effect.

    You encounter this usually when different JRE vs JDK are used ( more: maven installation has runtime as JRE instead of JDK )

    Login or Signup to reply.
  2. I had the same issue on RHEL 9.1. The solution was to look at /etc/java/maven.conf and set the correct JAVA_HOME here in this file.

    In other words, you can add just the single line similar to this to that maven.conf file:

    JAVA_HOME=/usr/lib/jvm/java-17-openjdk
    

    and you should be good.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search