如何在Maven项目中使用高于系统已装JDK 11的Java版本
问题解答
核心结论
系统默认安装JDK 11的前提下,完全可以在Maven项目中使用更高版本的Java。
适配场景与配置方案
场景1:仅生成高版本兼容字节码,不使用JDK 11以上新语法
该场景无需额外安装更高版本JDK,直接配置maven-compiler-plugin插件即可实现编译出兼容高版本JDK的字节码:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <!-- 源代码兼容JDK 11语法 --> <source>11</source> <!-- 生成的字节码兼容目标高版本JDK,例如17 --> <target>17</target> <!-- JDK 9以上新增参数,避免跨版本编译的平台兼容性问题 --> <release>17</release> </configuration> </plugin> </plugins> </build>
场景2:需要使用JDK 11以上的新语法特性
如果要使用更高版本JDK的独有特性(例如Java 17的密封类、Java 21的虚拟线程等),需要先安装对应版本的JDK,再通过以下两种方式配置:
方式1:临时指定Maven运行的JDK路径
执行Maven命令时临时覆盖JAVA_HOME环境变量即可:
- Linux/macOS 命令:
JAVA_HOME=/你的JDK高版本安装路径 mvn clean install - Windows CMD 命令:
set JAVA_HOME=C:\你的JDK高版本安装路径 && mvn clean install
方式2:通过Toolchains插件全局管理多JDK版本
适合需要频繁切换不同JDK版本项目的场景,无需每次手动修改环境变量:
- 首先在用户目录下的
.m2文件夹中新建toolchains.xml文件,内容如下:<toolchains> <!-- 配置高版本JDK,例如JDK 17 --> <toolchain> <type>jdk</type> <provides> <version>17</version> <vendor>openjdk</vendor> </provides> <configuration> <jdkHome>/你的JDK17安装路径</jdkHome> </configuration> </toolchain> <!-- 也可以同时配置原有JDK 11 --> <toolchain> <type>jdk</type> <provides> <version>11</version> <vendor>openjdk</vendor> </provides> <configuration> <jdkHome>/你的JDK11安装路径</jdkHome> </configuration> </toolchain> </toolchains> - 在项目
pom.xml中启用Toolchains插件:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <release>17</release> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <goals> <goal>toolchain</goal> </goals> </execution> </executions> <configuration> <toolchains> <jdk> <version>17</version> <vendor>openjdk</vendor> </jdk> </toolchains> </configuration> </plugin> </plugins> </build>
配置完成后直接执行普通Maven命令即可自动调用对应版本的JDK编译项目。
报错说明
你遇到的invalid target release报错,本质是Maven当前运行使用的JDK版本低于你配置的编译目标版本,按场景2的配置方式指定对应版本的JDK即可解决。
内容的提问来源于stack exchange,提问作者Abinash Sahu
相关产品推荐
相关产品推荐

