微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Maven 不使用 JDK 11

如何解决Maven 不使用 JDK 11

我最近为 JDK11 下载了 JDK11 和 OpenJ9 JRE。我已经很好地设置了 Java 类路径。

当我运行 java -version 命令时,我得到:

openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.24.0,JRE 11 Windows 10 amd64-64-Bit Compressed References 20210120_899 (JIT enabled,AOT enabled)
OpenJ9   - 345e1b09e
omr      - 741e94ea8
JCL      - 0a86953833 based on jdk-11.0.10+9)

但是我的 Maven 仍然指向我安装的旧 Java8。运行 mvn -version 给了我:

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: H:\apache-maven-3.6.3\bin\..
Java version: 1.8.0_271,vendor: Oracle Corporation,runtime: C:\Program Files\Java\jdk1.8.0_271\jre
Default locale: en_US,platform encoding: Cp1252
OS name: "windows 10",version: "10.0",arch: "amd64",family: "windows"

因此,当我编译 maven 模块时,出现以下错误

Caused by: java.lang.IllegalArgumentException: invalid target release: 11

我在我的父 pom.xml 中有这个设置:

<properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>

enter image description here

解决方法

您可以使用 maven-compiler-plugin 中的元素。

如此处所述How to tell compiler to use openjdk 11 via pom.xml 这是一个更高级的示例,它允许您在主要 Java 版本为 8 时编译 Java 11。我的大多数项目仍然是 Java 8,所以我觉得它很有用。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
                <fork>true</fork>
                <executable>C:\Program Files\Java\jdk-11.0.2\bin\javac</executable>
            </configuration>
        </plugin>
,

我使用maven的工具链机制,工作正常,你可以轻松切换项目的jdk编译器:

    <toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
      <toolchain>
        <type>jdk</type>
        <provides>
          <version>1.8</version>
        </provides>
        <configuration>
          <jdkHome>your_java_8_local_path</jdkHome>
        </configuration>
      </toolchain>
      <toolchain>
        <type>jdk</type>
        <provides>
          <version>11</version>
        </provides>
        <configuration>
          <jdkHome>your_java_11_local_path</jdkHome>      
        </configuration>
      </toolchain>
    </toolchains>

然后像这样在你的 pom.xml 中声明它(这里用 jdk 11 编译):

<build>     
    <pluginManagement>
        <plugins>
            <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>
        </plugins>
    </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-toolchains-plugin</artifactId>
            </plugin>
     </plugins>
</build>    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。