Maven的依赖传递-上

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的版本

是不是少了依赖范围,只有compile,才可以传递吧

还没写完