依赖排除 provided,optional 和 exclusion 最全区分指南

本文将介绍 Maven工程中3种避免依赖冲突的手段 provided,optional 和 exclusion 及其使用场景,并对其进行比较区分,最后以一个应用实例来做归纳总结。本人在网上寻找相关说明时大多语焉不详,模棱两可,有些甚至自己也没弄明白,故根据官方说明和自身试验写下此文,如有纰漏,还望指教。转载需经本人同意,注明出处方可转载。

一 介绍

为了方便叙述,以 项目B 为主体来讨论依赖与被依赖关系。
不管是provided,exclusion还是optional,都符合关系如下(虚线表示弱依赖)
下图表示在项目A没有直接依赖项目C的情况下,项目A都无法直接使用项目C,而项目B可以。

依赖于
无法获取
项目A
项目B
项目C

1 scope设为provided

  • 核心
    对象是依赖整体,依赖将提供编译而不参与打包,以使用方提供的为准,从而避免版本冲突
  • 使用场景
    希望协调依赖版本以使用方提供的为准
  • 典型应用
    项目B是我们要发布的组件,依赖于spring-boot 的部分功能(项目C),项目A要使用我们的组件,且项目A本身也是spring-boot项目,此时,对spring-boot的依赖极易出现版本冲突(项目A依赖的spring-boot版本可能经常变化)。此时就应以项目A的依赖为准,同时使得项目B也可以获得项目C升级的好处。如果不希望项目B依赖的项目C版本改变,则不应该用这种方式。
  • 使用方法
    项目B指定项目C的 dependency 下的 scope 为 provided
  • 图例
    如下,项目B原本依赖项目C1,但在项目A中引入
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值