Maven执行mvn clean install未跑测试(IDEA正常,配surefire无效)
故障核心原因
出现Tests run: 0且无报错的核心触发点是maven-surefire-plugin 3.0.0-M5 的测试引擎适配规则变更:
- 该版本的Surefire默认使用JUnit Platform(JUnit 5运行时)作为测试提供者,仅自动识别JUnit 5的测试类
- 你当前使用的是JUnit 4(依赖为
junit:junit,无JUnit 5相关依赖),Surefire无法自动加载能运行JUnit4测试的引擎,因此直接返回0个测试的结果 - IntelliJ IDEA内置了独立的JUnit4运行器,不依赖Maven的测试引擎配置,因此可以正常执行测试
除此之外还有两个常见诱因:
- 测试目录未遵循Maven默认约定(默认测试源码目录为
src/test/java,如果实际测试目录直接是根目录下的test,未在POM中配置testSourceDirectory,Maven会扫描不到测试类) - JUnit4依赖未指定明确版本,可能拉取到与Surefire不兼容的低版本
解决步骤
1. 适配JUnit4的测试引擎
在测试作用域下添加junit-vintage-engine依赖,让JUnit Platform兼容JUnit4的测试类,配置如下:
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency>
2. 补充JUnit4的明确版本
移除现有JUnit4依赖的无版本配置,指定兼容的稳定版本,避免版本冲突:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
3. 修正测试目录配置(仅当测试目录非Maven默认路径时需要)
如果测试类实际存放路径不是src/test/java,需要在POM的<build>节点下添加配置,告知Maven实际的测试源码目录:
<build> <testSourceDirectory>${project.basedir}/test</testSourceDirectory> </build>
4. 保留已尝试的模块路径配置
之前添加的<useModulePath>false</useModulePath>配置可以保留,避免Java 9+模块系统的类加载问题,最终的Surefire插件配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <useModulePath>false</useModulePath> </configuration> </plugin>
验证方式
执行mvn clean test,观察Surefire的输出日志,正常会显示扫描到的测试类数量、实际运行的测试结果。
内容的提问来源于stack exchange,提问作者Nathaniel Cutajar
相关产品推荐
相关产品推荐

