当前位置: 首页 > news >正文

JavaWeb——Maven(6/8):依赖管理-依赖传递 (介绍、直接依赖与间接依赖、演示、排除依赖)

目录

依赖传递

介绍

直接依赖与间接依赖

演示

排除依赖


依赖传递

介绍

  • 依赖具有传递性
    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

本小节以 Logback 为例,来了解 Maven 当中依赖传递的情况。

我们之前在使用 Logback 记录日志的时候,我们在 Java 工程当中引入了三个包,那这里我们怎么就只是引入了 Logback classic 这一个坐标呢?

其实呢,在 Maven 项目当中,我们引入这一个坐标,另外的两个包他也会自动引入进来,如上图,Logback 相关的另外两个依赖也自动的引入了,这就涉及到了 Maven 当中的一个特性,这个特性我们称之为依赖传递

直接依赖与间接依赖

Maven 当中的依赖是具有传递性的,比如我们来看一下下面这幅图,

在这幅图当中就描述了这三个项目之间的依赖关系。A 项目当中依赖了一个组件资源,还依赖了另外的一个组件,而 B 项目当中还依赖了一个组件,即使我们在 A 项目当中只指定了部分依赖,那在依赖传递当中,我们把当前项目直接通过依赖配置所添加的依赖,我们称之为直接依赖,所以对于 A 项目来说,这个组件以及下面的 B 项目就是它的直接依赖,如果被依赖的资源,它还依赖了其它资源,A 项目也会间接的依赖这些资源,这部分的依赖,我们称之为间接依赖

演示

简单介绍了依赖传递特性之后,接下来我们直接打开 A 项目,感受一下 Maven 的依赖传递特性。这里准备好了三个项目分别是 A、B、C,直接打开 A 项目的 pom.xml,

在 A 项目当中,我们会看到他依赖了 Logback 的依赖,A 项目当中,还依赖了另外一个项目,也就是说,A 项目依赖 B 项目,只需要通过依赖配置的形式来指定 B 项目的坐标就可以了。

再打开 B 项目的 pom.xml,

在 B 项目当中依赖了 junit 项目,而且还添加了一个C项目依赖,最后进入到C 项目,其当中依赖了一个工具包。

这是这三个工程之间的依赖关系。

那 A 项目当中到底有没有 C 的依赖呢?我们可以直接打开右侧的 Maven 面板直接来找到,

他直接的依赖有两个,一个是 maven-project 的 B,来我们直接打开下面这一项依赖,

可以看到C 传递到了 A,在 C 当中我们刚才看到引入了一个依赖,是工具包,那这个工具包也会传递到 A 项目,这就是 Maven 依赖传递。

可视化

他还给我们提供了一种可视化的查看方式,我们要想查看某一个 Maven 项目的依赖情况,我们只需要打开 pom 文件,在 pom 文件当中我们点击右键,然后选择第二个 “Diagrams”,然后选择 “Show Dependencies”,

这样就会以图表的形式来展示出依赖之间的关系,

此时我们就会清晰的看到,A 直接依赖了 Project 的 B 还有 Logback 的依赖,而 Project 的 B 当中又依赖了 Project 的 C 和一个工具,而 Project 的 C 当中又依赖了 commons。

那此时我们就能够看到,Project 的 A 当中这些依赖他都有,就是因为依赖传递。

排除依赖

  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
  • 通过 exclusion 标签来排除依赖

如果 A 依赖了 B,B 又依赖了另外一个资源,A 它是会依赖这个资源的,如果 A 只想依赖 B 项目,它不需要 B 项目依赖的这个资源,我们就可以通过 Maven 当中的排除依赖来解决这个问题。那所谓排除依赖呢,我们可以主动断开依赖的资源,被排除的资源是无需指定版本的,默认会传递到 A,断开依赖的资源,A 就不会依赖这个资源了。

在 A 项目当中,B 项目当中会传递 C ,下来还传递一个 “junit” 这个依赖,那假设我在 A 项目当中我就不想要 “junit” 这个依赖,我就可以将 “junit” 这个依赖排除掉。

“junit” 这个依赖是传递下来的,所以我们就需要在 A 项目当中引入传递 B 项目依赖的时候,在下面来排除依赖,

排除依赖的时候,我们是不需要指定版本的。

这样配置就结束了,一旦 pom 文件发生变化之后,我们需要点击这个重新加载的按钮,来刷新一下,大家注意看,B 当中传递的 “junit” 会不会传递下来,

我们会看到,“junit” 依赖就没有了,那么此时,A 当中虽然依赖了 B,但是 B 所依赖的 “junit” 就没有出现了,这就是排除依赖。


END


学习自:黑马程序员——JavaWeb课程


http://www.mrgr.cn/news/55779.html

相关文章:

  • 使用休眠的方式来解决电脑合盖后偶尔不能正常睡眠的问题
  • 【MyBatis-Plus系列】QueryWrapper中or的使用
  • AI大模型是否有助于攻克重大疾病?
  • Javascript链表模拟
  • 常用DateUtils工具类
  • 大咖征稿|复旦大学:浅谈高校邮件系统启用二次验证的实施经验
  • Java 分页实战详解
  • 保研推荐信模板
  • Unity地面检测、跳跃
  • 低功耗4G模组的小秘密:RSA算法示例驾到,通通闪开...
  • 一分钟运行DBT入门示例项目(Jaffle Shop)
  • 新的类Rufus应用可带来简单的Windows 11 24H2安装旁路
  • 【07】z检验
  • Redis在实践的关键点
  • autMan框架对接飞书机器人
  • Golang | Leetcode Golang题解之第500题键盘行
  • Flutter Container容器组件实战案例
  • 精选录屏软件下载工具:记录精彩每一刻
  • 基于leaflet-polygon.fillPattern的面状对象图片填充实现
  • SQL CHECK 约束:确保数据完整性的关键
  • 【星闪技术】WS63E模块实时显示当前环境温湿度
  • ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)
  • AI学习指南深度学习篇-对比学习(Contrastive Learning)简介
  • 用malloc申请空间的开辟和free空间的释放
  • 计算机网络基本命令
  • 《深度学习》 了解YOLO基本知识