maven依赖冲突解决方案

1. 传递依赖

  1.1 什么是传递依赖

    如果A依赖于B,B依赖于C,则称B是A的直接依赖,C是A的传递依赖

  1.2 传递依赖冲突

    如A依赖于B,B依赖于C(1.1版本),同时A依赖于D,D也依赖于C(2.1版本)。那么此时A可能传递依赖C的1.1版本,也可能传递依赖C的2.1版本。造成冲突。

  1.3 传递依赖的解决

    1.3.1 第一声明者优先原则

      谁先声明(即<dependency>配置的先后顺序中先配置的),就用谁的传递依赖。

      举例:如果我们的A项目中依赖了B的jar包,B依赖了C的1.1版本。同时我们的A项目依赖了D的jar包,D依赖了C的2.1版本。则如果在配置文件中我们先配置了依赖B,则A项目会传递依赖C的1.1版本。

    1.3.2 路径近者优先原则

      直接依赖 高于 传递依赖

      举例:如果我们的A项目中依赖了B的jar包,B依赖了C的1.1版本。同时,我们直接A项目中依赖C的2.1版本。则A项目最终会依赖C的2.1版本。(因为C的2.1版本是A的直接依赖,级别要高于1.1版本相对于A的传递依赖)

注:以上两种原则为maven的自己调节原则

    1.3.3 排除依赖

      将不需要依赖的传递依赖排除掉

      在<dependency>标签中添加子标签<exclusions>和<exclusion>将某传递依赖的jar包排除掉

    1.3.4 版本锁定(推荐使用)

      直接指定所依赖的jar包版本。

      使用<dependencyManagement>标签,在改标签中明确指定所依赖的jar包的版本。

      

猜你喜欢

转载自blog.csdn.net/tca0819/article/details/80630543