Maven 依赖管理(scoper依赖范围,依赖传递,冲突等)

前言
  1. 在上一篇博客中,主要是写的关于如何通过坐标的方式,在互联网中精准定位需要使用的 jar 包,并由中央仓库下载到本仓库,其中,坐标主要包括 GAV 这3部分。
  2. 事实上,一个依赖除不仅可以从互联网上导入 jar 包,同时也可以依赖其他模块,也可以被其他模块依赖等
  3. 因此,对于依赖这个标签而言,仅包括 GAV 这3部分是不够的,还包括其他的部分来应对不同模块之间的依赖调用的关系
引入
  1. 提到依赖管理,就必须了解依赖之间调用关系
  2. 举例以下情况
    在这里插入图片描述
  3. 由图,我们可以看到,这三个依赖之间有明显的调用与被调用的关系
  4. 我们的依赖管理就是在这种情境下产生的,即一个依赖对它本身做出规定:这个依赖是否可以被其他依赖所依赖,如果可以,那么可被依赖的层级(范围)是什么样的,哪些部分可以不能被依赖,哪些依赖是会被筛除掉的等
  5. 例如,若依赖 test1 规定它本身不可被依赖,则 test2 就无法依赖 test1。
    反之,若依赖 test1 规定它本身可以被依赖,则 test2 就可以依赖 test1,并且继承依赖 test1 本身所依赖的其他依赖。
scope 范围
  1. 如图所示
    在这里插入图片描述
  2. compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  3. test:测试依赖范围。只对于测试classpath有效
  4. provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  5. runtime:运行时提供。例如:jdbc驱动
依赖冲突
  1. 若 A 依赖 B ,B 依赖 C,但对于同一个 jar ,B 和 C 使用的版本不同
  2. 那么此时,A 对于这个 jar 的版本会参考 B ,即就近原则
可选依赖
  1. < optional > true/false 是否可选,也可以理解为是否向下传递
  2. 在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false
    3.如图
    在这里插入图片描述
排除依赖
  1. 若 A 依赖 B,但是对于依赖 B 本身的部分依赖,依赖 A 并不需要
  2. 此时,就可以在依赖 A 中做出声明,依赖 B 的同时,排除依赖 B 中不需要的部分
  3. 注意exclusions是写在dependency中
    在这里插入图片描述
总结
  1. 依赖管理主要是针对 Maven 项目中,依赖本身做出的管理
  2. 由于 Maven 中,不同模块其本身都会自带一个 pom.xml 配置文件用于管理该项目所会使用到的依赖。且一个模块本身,也可以整体作为一个依赖。
  3. 显然,不同模块之间的依赖与被依赖就需要进行管理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值