Spring Initializr生成项目中Spring-test无法识别SpringRunner类问题
解决Spring Boot 1.5.9 + spring-test 4.3.13中SpringRunner无法解析的问题
咱先来理清楚问题:你用Spring Initializr生成了Spring Boot 1.5.9的项目,引入spring-boot-starter-test后,自动生成的测试类里@RunWith(SpringRunner.class)找不到SpringRunner类,但明明Maven依赖里已经包含spring-test-4.3.13.RELEASE.jar,而且Jar包里确实有这个类,回退到4.3.12就正常了。这大概率是依赖加载或IDE缓存的问题,以下是几个不用回退版本就能解决的办法:
1. 强制刷新Maven依赖并清理IDE缓存
这是最常见的解决思路,因为IDE经常会缓存旧的依赖状态,导致明明Jar包存在却找不到类:
- 先在项目根目录执行Maven命令:
mvn clean compile - 然后用IDE的Maven刷新功能(比如IntelliJ的「Reimport All Maven Projects」,Eclipse的「Maven -> Update Project」)
- 最后清理IDE缓存并重启:
- IntelliJ:
File -> Invalidate Caches... -> 勾选Clear file system cache and local history -> Invalidate and Restart - Eclipse:
Project -> Clean... -> 选择你的项目 -> OK,然后重启Eclipse
- IntelliJ:
2. 排查并解决依赖冲突
虽然Spring Boot的依赖管理会帮我们统一版本,但有时候其他依赖可能会偷偷引入低版本的spring-test,导致类加载冲突:
- 执行Maven命令查看完整依赖树:
mvn dependency:tree - 搜索输出里的
spring-test,看看有没有其他依赖引入了非4.3.13的版本 - 如果发现冲突,可以在
spring-boot-starter-test的依赖中排除掉冲突的模块,或者直接在dependencyManagement里强制指定spring-test的版本:<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.13.RELEASE</version> </dependency> </dependencies> </dependencyManagement>
3. 手动导入SpringRunner类
有时候IDE的自动导入会抽风,咱手动指定导入路径试试:
在测试类顶部添加:
import org.springframework.test.context.junit4.SpringRunner;
确认导入的包是org.springframework.test.context.junit4,别导错了其他包。
4. 检查JDK版本兼容性
Spring Boot 1.5.9和spring-test 4.3.13都要求JDK 1.7或1.8,如果你的项目用了更高版本(比如JDK 9+)或者更低版本,可能会出现类加载异常:
- 检查IDE的项目SDK配置(比如IntelliJ的
File -> Project Structure -> Project Settings -> Project) - 确认pom.xml里的
java.version配置和你用的JDK一致:<properties> <java.version>1.8</java.version> </properties>
一般来说,按照上面的步骤操作,就能解决SpringRunner无法解析的问题,不用回退到旧版本的spring-test啦~
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

