![cc2c575d9d88ccdf48182efca388a5f5.png](https://i-blog.csdnimg.cn/blog_migrate/10ab017dc860e03878b905bd5a666a11.png)
依赖结构
├── project
| |
| └──build.gradle
├── build.gradle
└── settings.gradle
最外层的build.gradle里面有这样一段定义
subprojects {
dependencies {
compile (
'org.springframework:spring-test:4.1.4.RELEASE'
)
}
}
指定了所有的子项目都用spring-test 4.1.4这个版本,但是子项目是基于Springboot 2.1.13,需要spring-test 5+
这样就造成project这个子项目的单元测试无法使用,找不到org.springframework.test.context.junit4.SpringRunner
这个类,因为spring-test 4.1.4没有这个类
Springboot 单元测试代码如下
package xxx.xxx;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;//找不到
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestTask {
@Test
public void test(){
System.out.println("starting");
}
}
解决方案
直接覆盖冲突的jar包即可
- 覆盖 直接在project/build.gradle下指定最新版本覆盖
dependencies {
//显示指定spring-test版本为5+,避免父级subprojects定义的4.1.4.RELEASE版本带来的冲突
compile 'org.springframework:spring-test:5.1.14.RELEASE'
}
Springboot jar包冲突很难查找,有时候不知道该用哪个版本的jar包,如果怀疑是jar包冲突,先看看此网站该Springboot版本依赖的jar包版本是多少,依赖查询参考:将url里面的版本号替换成目标版本即可
https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/htmlsingle/#appendix-dependency-versions
如果找不到冲突的jar包,重新从spring官网下载一个空壳项目跑起来看看别人能运行的和你的项目到底有什么区别,SpringBoot空项目生成
https://start.spring.io/