maven依赖管理

本文详细介绍了Maven依赖管理的基础知识,包括依赖范围、依赖传递、依赖调节原则及版本锁定等内容,并通过实例展示了如何排除依赖冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

maven依赖管理

1.依赖范围   (依赖相当于java中的import  是否需要导入别的jar包)

使用控制依赖与三种classpath(编译期,测试时期,运行时期)的关系

 complie   在编译,测试,运行时期,a项目在编译期依赖b,并且在测试和运行时期也依赖b项目, (默认值)             会打jar包或者war包

test    只在测试时有效,    a项目只在测试时依赖b项目,   不会打jwar包

provided  在编译和测试是有效,在运行时不会打jar或war包

runtime   会在测试时和运行时进行打包处理,(会打war包)

2.依赖传递

a----->b          第一关系:a依赖b    compile

b----->c           第二关系:b依赖c complie

1.纵坐标,  直接依赖

a---->b   a依赖b   那么b就是a的直接依赖

在a的pom.xml中添加b的坐标

2横坐标,    传递依赖

b----->c  b依赖c  那么c就是a的传递依赖

3.中间依赖

传递依赖的范围  a依赖c的范围

 

3.依赖调节原则

情景再现:
  项目 A 依赖于项目 B,项目 B 依赖于项目 C(v1), 项目 A 依赖于项目 D,项目 D
  依赖于项目 E,项目 E 依赖于 C(v2),
      1、A--->B---->C(v1) ,
      2、A------>D---->E----->C(v2)
  项目 A 隐形依赖了两个版本的 C,那到底采用哪个版本呢?

  依赖调节第一原则:    路径优先

    很明显,第一种路径深度是 3,第二种路径深度是 4,所以,maven 会采用 C(v1)

  依赖调节第二原则:    声明优先

    假设路径深度相等,那么声明在前的会被引用。

4.版本锁定

在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
pom.xml 文件中,jar 的版本判断的两种途径
1.   如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven
  就会倒 dependencyManagement 里面去找有没有对该 artifactId 和 groupId 进行过
  版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为 dependency
  声明一个 version。
2.     如果 dependencies 中 的 dependency 声 明 了 version , 那 么 无 论
  dependencyManagement 中有无对该 jar 的 version 声明,都以 dependency 里的
  version 为准。

5.排除依赖

  我们仔细观察 Maven Dependencies 下的 jar 包,会发现存在了两个 javassist
包,一个是 javassist-3.18.1-GA. ,另一个是 javassist-3.11.0-GA 。这是因为我
们引入三大框架的 jar 包,hibernate 依赖 javassist-3.18.1-GA ,而 struts 依赖
javassist-3.11.0-GA 。这就是我们通常所说的 jar 包版本冲突,如果这两个 jar 包
同时存在,会导致后续某些操作会存在问题(比如 openSessionInView 失效),
所以需要排除低版本的 jar 包。
如何来排除依赖呢?添加下面红色字体的部分。作用是排除 struts 中依赖的
javassist 的 jar

  

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.3.24</version>
  <exclusions>
    <exclusion>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
    </exclusion>
  </exclusions>
</dependency>

  添加后发现 javassist-3.11.0-GA 消失。

 

转载于:https://www.cnblogs.com/fjkgrbk/p/dependencyManagement.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值