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

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.kler.cn/news/365412.html

相关文章:

  • 合合信息亮相PRCV大会,探讨生成式AI时代的内容安全与系统构建加速
  • 开发运维警示录-20241024
  • 京准电钟解读:NTP网络对时服务器助力厂区改造方案
  • C++对象模型:关于对象
  • arrylist怎么让他变得不可修改
  • Perl打印9x9乘法口诀
  • 题解 力扣 LeetCode 739 每日温度 C++
  • 海外云手机怎样助力亚马逊店铺运营?
  • 合约门合同全生命周期管理系统:从合同创建到归档的全流程管理解决方案
  • Spring MVC 原理与源码
  • 六个方向比较分析:ChatGPT-o1-preview与 ChatGPT-4o在论文写作辅助上的差异
  • 富格林:察觉欺诈有效追损措施
  • 解决运行jar错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  • webRTC搭建:STUN 和 TURN 服务器 链接google的有点慢,是不是可以自己搭建
  • 当遇到 502 错误(Bad Gateway)怎么办
  • 【Python】实战:猜数游戏
  • 如何在 Ubuntu 18.04 上使用 Let‘s Encrypt 保护 Apache
  • 挖矿病毒的处理
  • 用STM32硬件思维学JAVA--23种设计模式
  • 分布式解决方案---分布式ID
  • 自动化测试工具Appium介绍
  • Java基础选择题
  • win10 opencv gpu c++版本编译教程
  • HarmonyOS 5.0应用开发——Navigation实现页面路由
  • 全方面熟悉Maven项目管理工具(一)认识Maven、Maven如何安装?
  • 使用Angular构建动态Web应用