'maven with JDK11: javac: invalid flag: --release
I'm trying to set up a simple maven project with java 11. As I want to keep JAVA_HOME to be version 8, I'm using maven-toolchains-plugin
to make maven use jdk11 for this project.
While maven successfully finds a matching toolchain for jdk-11.0.1, I keep getting " javac: invalid flag: --release". What am I doing wrong?
Here are the plugin configurations:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>11</version>
</jdk>
</toolchains>
</configuration>
</plugin>
The toolchain is defined as:
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
<id>JavaSE-1.11</id>
</provides>
<configuration>
<jdkHome>C:\Program Files\Java\jdk-11.0.1\bin</jdkHome>
</configuration>
<toolchain>
Solution 1:[1]
As I found out, the configuration is just fine. The problem was that jdkHome
in toolchains.xml
was pointing to the \jdk-11.0.1\bin
direction instead of \jdk-11.0.1
directly..... Using <jdkHome>C:\Program Files\Java\jdk-11.0.1</jdkHome>
solves the problem..
Solution 2:[2]
Changing the jdk version should fix the problem mostly. Replace
<version>1.11</version>
with
<version>11</version>
Do ensure though that your maven is configured with JDK-11 using the command mvn -version
and confirming the Java version there. You can also verify the toolchains.xml
JDK configured as well.
In case you're trying to compile using different versions of the compiler, you need to ensure executions under the maven-compiler-plugin
as:
<executions>
<execution>
<id>java11</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<release>11</release>
<jdkToolchain>
<version>11</version>
</jdkToolchain>
<compileSourceRoots>
<compileSourceRoot>${project.basedir}/src/main/java11</compileSourceRoot>
</compileSourceRoots>
<outputDirectory>${project.build.outputDirectory}/META-INF/versions/11</outputDirectory>
</configuration>
</execution>
</executions>
Here is the sample pom.xml
referred for the above.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Hengrui Jiang |
Solution 2 |