JDK11迁移时Maven surefire-plugin执行版本与pom声明不一致如何排查
Maven surefire插件版本被覆盖的常见原因
你可以先执行 mvn help:effective-pom 命令输出项目最终生效的pom配置,搜索maven-surefire-plugin即可确认实际生效的2.20.1版本的来源,常见的覆盖场景如下:
- 父POM的pluginManagement配置优先级更高
如果你的项目继承了第三方父POM(如Spring Boot父POM、企业内部公共父POM),父POM的<build><pluginManagement>节点中如果声明了maven-surefire-plugin的版本,优先级会高于子模块直接声明的插件版本。如果需要覆盖父POM的配置,你可以在当前模块的<build><pluginManagement>节点下重新声明2.22.2版本的surefire插件。 - 激活的Profile强制指定了版本
检查三类配置中激活的profile是否包含surefire版本配置:当前项目pom.xml中的profile、用户目录下.m2/settings.xml的profile、Maven安装目录下conf/settings.xml的全局profile。激活的profile中声明的插件版本会覆盖普通配置的版本,你可以执行mvn help:active-profiles命令查看当前所有激活的profile逐一排查。 - 第三方插件绑定了低版本surefire
部分和测试流程绑定的第三方Maven插件(如代码覆盖率插件、静态扫描插件)会强制依赖指定版本的surefire插件,传递引入2.20.1版本覆盖你的配置。 - 本地Maven元数据缓存异常
删除本地Maven仓库下org/apache/maven/plugins/maven-surefire-plugin目录,再执行mvn clean install -U重新拉取插件,排除缓存损坏导致的版本调用异常。
内容的提问来源于stack exchange,提问作者Kiss Adam
相关产品推荐
相关产品推荐

