maven的依赖传递及其解决maven依赖冲突

  1. 什么是依赖传递
    先添加 springmvc 的核心依赖的坐标
    在这里插入图片描述
    会发现出现除了 spring-webmvc 以外的其他 jar。因为我们的项目依赖 spring-webmv.jar,而
    spring-webmv.jar 会依赖 spring-beans.jar 等等,所以 spring-beans.jar 这些 jar 包也出现在了我
    们的 maven 工程中,这种现象我们称为依赖传递。从下图中可看到他们的关系:(请注意
    spring-beans 的版本)
    在这里插入图片描述
  2. 依赖冲突的几种解决办法
    我们接着上面的在添加一个依赖
    在这里插入图片描述
    我们会发现这两个 jar 包同时都依赖了 spring-beans
    在这里插入图片描述但是
    spring-webmvc 依赖 spirng-beans-4.2.4,spring-context 依赖 spring-beans-5.0.2,但是发现
    spirng-beans-4.2.4 加入到工程中
    在这里插入图片描述而我们希望 spring-beans-5.0.2 加入工程。这就造成了依赖冲突。解决依赖冲突有以下原则:
    3. 依赖调解原则
    maven 自动按照下边的原则调解:
    3.1、第一声明者优先原则
    在 pom 文件定义依赖,先声明的依赖为准。
    测试:
    如果将上边 spring-webmvc 和 spring-context 顺序颠倒,系统将导入 spring-beans-5.0.2。
    分析:
    由于 spring-webmvc 在前边以 spring-webmvc 依赖的 spring-beans-5.0.2 为准,所以最终
    北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
    spring-beans-5.0.2 添加到了工程中。
    3.2、路径近者优先原则
    例如:还是上述情况,spring-contex 和 spring-webmvc 都会传递过来 spirng-beans,那
    如果直接把 spring-beans 的依赖直接写到 pom 文件中,那么项目就不会再使用其他依赖传
    递来的 spring-beans,因为自己直接在 pom 中定义 spring-beans 要比其他依赖传递过来的路
    径要近。
    在本工程中的 pom 中加入 spirng-beans-5.0.2 的依赖,根据路径近者优先原则,系统将导入
    spirng-beans-5.0.2:
    在这里插入图片描述
    4. 排除依赖
    上边的问题也可以通过排除依赖方法辅助依赖调解,如下:
    比如在依赖 spring-webmvc 的设置中添加排除依赖,排除 spring-beans,
    下边的配置表示:依赖 spring-webmvc,但排除 spring-webmvc 所依赖的 spring-beans。
    在这里插入图片描述5.锁定版本
    面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
    本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
    的版本的为准添加到工程中,此方法在企业开发中常用。
    如下的配置是锁定了 spring-beans 和 spring-context 的版本:
    在这里插入图片描述还可以把版本号提取出来,使用标签设置成变量。
    在这里插入图片描述注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本
    的依赖则需要单独添加标签,如下:
    在这里插入图片描述上边添加的依赖并没有指定版本,原因是已在中锁定了版本,
    所以在下不需要再指定版本。
    下篇介绍分模块构建工程[应用]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值