如何配置Maven使用指定JDK运行Spring Boot项目单元测试
问题根因
测试阶段出现JDK版本不兼容,核心是两个配置问题:
- 你使用的
maven-surefire-plugin 3.0.0-M7是里程碑测试版,存在toolchains自动识别的已知缺陷 - 配置里的JDK vendor值填的是
sun,但Ubuntu源安装的OpenJDK对应的vendor标识是openjdk,插件匹配不到toolchains中定义的JDK18,就会默认回退到启动Maven本身的JDK11运行测试,最终报class版本不兼容错误。
解决方案
不需要硬编码JDK路径,按以下步骤调整配置即可:
1. 确认全局toolchains配置
检查用户目录下.m2/toolchains.xml中的JDK配置,确保vendor值和实际安装的JDK类型匹配,OpenJDK配置参考如下:
<?xml version="1.0" encoding="UTF-8"?> <toolchains> <toolchain> <type>jdk</type> <provides> <version>18</version> <vendor>openjdk</vendor> </provides> <configuration> <jdkHome>/usr/lib/jvm/java-18-openjdk-amd64</jdkHome> </configuration> </toolchain> </toolchains>
2. 升级插件版本并修正项目内配置
将两个插件升级到稳定版,修正vendor值,不需要额外给surefire配置JVM路径,插件会自动从toolchains上下文获取对应版本JDK运行测试,pom.xml中插件配置参考如下:
<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>18</version> <vendor>openjdk</vendor> </jdk> </toolchains> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> </plugin>
可选:单独指定surefire使用的toolchain
如果不想依赖全局toolchains的自动匹配,也可以直接在surefire插件中显式指定要使用的JDK toolchain规则,同样不需要硬编码路径,配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <configuration> <jdkToolchain> <version>18</version> <vendor>openjdk</vendor> </jdkToolchain> </configuration> </plugin>
验证方式
执行mvn clean install时加-X参数开启debug日志,搜索surefire插件启动参数中的java命令路径,确认指向JDK18的安装路径即配置生效。
内容的提问来源于stack exchange,提问作者thatonetallguy
相关产品推荐
相关产品推荐

