问答

某工程的依赖A中排除另一个依赖B,再在工程本身引入依赖B,会导

作者:admin 2021-05-12 我要评论

假如某个工程有一个依赖A A依赖B 而工程也直接依赖B,但是不同版本 那么写pom时,能在引入A的地方排除B不? 譬如如下写法,会导致A找不到B依赖而出问题吗? depe...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

假如某个工程有一个依赖A

A依赖B

而工程也直接依赖B,但是不同版本

那么写pom时,能在引入A的地方排除B不?

譬如如下写法,会导致A找不到B依赖而出问题吗?

<dependency>
  A
  <exclusions>
   <exclusion>
      B
   <exclusion>
  </exclusions>
</dependency>

<dependency>
  B
</dependency>
###

理论上不需要排除。因为最短路径优先。但是可读性相对差一点。

###

不会的,新增的依赖包写在排除包之前。

###

你完全可以这样做。
但由于版本不同,也需要谨慎操作。
因为这可能会给你带来一些不太直观、不好排查的问题。
举个例子:

A依赖于B功能的 xxxx.xxx.test() 函数,此函数在1.0版本中被B提供,但在1.1版本中被B移除。
此时,如果我们声明项目依赖于B的1.1版本,则A将报找不到B的 xxxx.xxx.test() 函数的异常。

当然了,以上错误不一定出现,原因有2:

  1. 我们声明的B版本可以完全兼容A中声明的B版本。
  2. 即使A调用了某个特定B版本的功能,可能在使用的过程中我们并没有去触发A的相同功能,此时也不会发生错误。
###

如果是为了防止版本冲突,建议在父pom通过dependencyManagement来统一版本,子pom不需要定义jar版本,pom里太多的exclusion太影响代码的可读性了

###

不会,maven管理加载依赖后,找包是根据包名,而不是版本,意思就是只要项目中有这个包名,就可以找到。

实际应用中,不建议用<exclusion>排除,
最好使用<dependencyManagement>统一项目中的包版本。

###

一般来说是没事的,需要注意的就是排除的包的版本和单独新增的版本,会不会有不兼容的情况。

关注我的博客: https://www.epoooll.com/

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 某工程的依赖A中排除另一个依赖B,再在

    某工程的依赖A中排除另一个依赖B,再在

  • 有什么组件或模块能把vue节点字符串解

    有什么组件或模块能把vue节点字符串解

  • 关于react绑定事件,闭包传参内存泄漏问

    关于react绑定事件,闭包传参内存泄漏问

  • 您如何用Java 8 Instant表示MS-DTYP`DA

    您如何用Java 8 Instant表示MS-DTYP`DA

腾讯云代理商
海外云服务器