Maven
的依赖传递
依赖传递是什么?
在maven
中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。
假设C依赖B,B依赖A,那么我们可以根据maven
项目依赖的特征推导出来
- 项目C也依赖A
这里我给大家举了一个junit5的依赖例子,可以看到我在pom文件中导入的只有一个junit-jupiter-params
但是对应的@Test是可以使用的.
通过上面的图可以看到,我的项目直接依赖了junit-jupiter-params
,而junit-jupiter-params
依赖了junit-jupiter-api
所以,最终的结果就是在项目中间接依赖了junit-jupiter-api
依赖冲突
我们可以看到上面截图中,已经添加了junit-jupiter-api
对应的依赖是5.6.1的版本,但是junit-jupiter
中也有junit-jupiter-api
这个依赖是5.8.1,对应则会造成版本的冲突.
如何解决依赖冲突
-
1.使用
maven
提供的依赖调解原则-
第一声明者优先原则
-
路径近者优先原则
-
-
2.排除依赖
-
3.锁定版本
依赖调节原则——第一声明者优先原则
在 pom
文件中定义依赖,以先声明的依赖为准。
- 其实就是根据坐标导入的顺序来确定最终使用哪个传
递过来的依赖。
还是看这个图,对应的junit-jupiter-params
下的junit-jupiter-api
是5.6.1版本,junit-jupiter
下的junit-jupiter-api
是5.8.1版本
看pom文件中,最先声明的标签是junit-jupiter-params
,所以最终传递的junit-jupiter-api
是5.6.1的版本,而junit-jupiter-api
的5.8.1版本则被忽略掉
最终结果可以看到最左边,项目最终的依赖下,junit-jupiter-api
是5.6.1的版本