带有 JDK11 的 Maven:javac:无效标志:--release

maven with JDK11: javac: invalid flag: --release

我正在尝试使用 java 11 设置一个简单的 maven 项目。因为我想将 JAVA_HOME 保留为版本 8,所以我正在使用 maven-toolchains-plugin 来制作maven 在这个项目中使用 jdk11。

虽然 Maven 成功找到了 jdk-11.0.1 的匹配工具链,但我一直收到“javac:无效标志:--release”。我做错了什么?

插件配置如下:

 <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>

工具链定义为:

 <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>

更改 jdk 版本应该可以解决大部分问题。替换

<version>1.11</version>

<version>11</version>

请确保您的 Maven 配置为 JDK-11,使用命令 mvn -version 并确认那里的 Java 版本。您还可以验证配置的 toolchains.xml JDK。


如果您尝试使用不同版本的编译器进行编译,您需要确保在 maven-compiler-plugin 下执行:

<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>

这里是上面提到的sample pom.xml

正如我所发现的,配置很好。问题是 toolchains.xml 中的 jdkHome 指向 \jdk-11.0.1\bin 方向而不是直接指向 \jdk-11.0.1 .....使用 <jdkHome>C:\Program Files\Java\jdk-11.0.1</jdkHome> 解决了问题..