Junit5 与 Hive 的依赖冲突
目录
Junit5 与 Hive 的依赖冲突
1 问题
今天在给一个旧工程添加 hive 依赖后,出现测试方法报错的问题,而且之前能正常跑的测试方法,现在也一样报错

2 排查
仔细看上面报错信息,里面报的 junit 版本是 3.8.1 版,而这个项目使用的依赖是 5.7.2 版,推测是依赖冲突引起的问题
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<scope>provided</scope>
</dependency>
检查依赖树,证实是 hive –» zookeeper –» jline 引入了 3.8.1 的 junit

3 解决
3.1 方法 1 :
改用 4.13.2 的 junit
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>provided</scope>
</dependency>

此时,被依赖树引入的 3.8.1 版的 junit 会因为与 4.13.2 版的存在冲突而被自动省略
而使用 5.7.2 版的的时候,3.8.1 版的 junit 之所以不会被自动省略,是因为 v5 开始使用新的 <groupId> 和 <artifactId> 的原因:

3.2 方法 2 :
使用 5.7.2 版的的时候,可以给 hive 依赖添加 junit 依赖的排除
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.9</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
