maven2+依赖传递
源文章:https://blog.csdn.net/honghai...
传递性依赖
传递性依赖是在maven2中添加的新特征,这个特征的作用就是你不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。例如我们依赖于spring的库文件,但是spring本身也有依赖,如果没有传递性依赖那就需要我们了解spring项目依赖,自己添加到我们的项目中。有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
假设A依赖于B,B依赖于C,我们说A对于B是第一直接依赖,B对C是第二直接依赖,A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围。
最左边一行表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的交叉单元格则表示传递性依赖范围。
compile | test | provided | runtime | |
compile | compile | --- | --- | runtime |
test | test | --- | --- | test |
provided | provided | --- | --- | provided |
runtime | runtime | --- | --- | runtime |
仔细观察上面表格,我们发现这样的规律:
- 当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致;
- 当第二直接依赖的范围是test的时候,依赖不会得以传递;
- 当第二直接依赖的范围是provided的时候,只传递第一直接依赖的范围也为provided的依赖,切传递性依赖的范围同样为provided;
- 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为runtime。
Maven对传递性依赖的处理
有些依赖,maven会对其按照下述原理自动处理
1).短路优先:谁离得最近就使用谁的依赖jar包
C到达A为C->B->A
C到达B为C->B
例如:
A中的commons-io的版本为2.4
B中的commons-io的版本为2.0
C中依赖于B,B依赖于A
则C的commons-io的包为2.0版本
因为依赖的短路优先
2).如果两条路都是一样长的时候
C到达A为C->A
C到达B为C->B
则看pom文件中依赖的两个工程谁在前面就是用哪个版本
maven2+依赖传递相关推荐
- maven pom.xml解析、命令说明、依赖传递、继承、聚合、properties、build、依赖范围、版本仲裁、profile
maven是当前Java项目中用到最多的依赖管理工具.最开始的项目比较小引入的依赖包也少所以可以通过手动加载jar包的方式来管理依赖包:但随着项目越来越复杂各种大小框架层出不穷,一个项目的开发往往依赖 ...
- maven依赖管理(依赖配置、依赖传递、依赖冲突、依赖范围)
文章目录 基本说明 依赖配置 依赖传递 直接依赖 间接依赖 依赖冲突 路径优先 声明优先 特殊依赖 可选依赖 排除依赖 可选依赖和排除依赖区别 依赖范围 总结 基本说明 这篇文章会介绍在maven中的 ...
- maven 的依赖传递
1. 首先就maven的依赖传递来说:只有<scope>compile</scope>时,才能进行依赖的传递,其他的范围没有依赖传递可言!!! 2. 当依赖级别相同时, ...
- Maven中 jar包冲突原理与解决办法依赖传递
Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...
- 【Android Gradle 插件】Android 依赖管理 ⑥ ( 依赖冲突处理 | transitive 依赖传递设置 | exclude 依赖排除设置 | force 强制指定依赖库 )
文章目录 一.查询 Android 依赖库的配置 二.通过 ModuleDependency#transitive 依赖传递设置 三.通过 ModuleDependency#exclude 设置排除子 ...
- 用exclusion切断maven jar包的依赖传递
1.问题描述 proxool 包依赖的avalon-framework-api包,如何切断这种依赖关系呢? 2.解决方法 在pom文件中,通过exclusion标签,切断maven jar包的依赖传 ...
- 武林外传—阿沅,这是依赖传递呀!
武三通最近收养了一个义女,叫阿沅,此女自幼父母双亡,十分孤苦,武三通对他一直疼爱有加,不光教她武术,还教她编程,想着日后等阿沅长大了,也可以当个程序媛什么的,作为谋生的本领. 一日,阿沅正一个人鼓捣着 ...
- 02-Maven高级-分模块开发、依赖传递、聚合、继承(SpringBoot的部分底层原理)、多模块开发(环境切换)、Nexus私服搭建与使用
文章目录 学习目标 一.分模块开发与设计 1. 分模块开发的意义 问题导入 模块拆分原则 2. 分模块开发(模块拆分) 问题导入 2.1 创建Maven模块 2.2 书写模块代码 2.3 通过mave ...
- 【热门框架】Maven依赖传递,可选依赖以及排除依赖指的是什么?有什么意义?
Maven依赖传递是指当一个项目依赖另一个项目时,Maven会自动下载并构建这些依赖项,同时还会将这些依赖项所依赖的其他项一并下载并构建.这个过程会一直递归下去,直到所有依赖的项都被下载并构建完成.这 ...
最新文章
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
- 迟来的2017年计划
- 大话设计模式(八 用“策略模式”是一种好策略)
- mysql query sql_sql:query 标签
- Page Object设计模式实践
- TensorFlow 教程 --教程--2.6卷积神经网络
- 浅谈Js对象的概念、创建、调用、删除、修改!
- 【python】编程语言入门经典100例--11
- Java入门基础第3天《使用记事本编写运行Java程序》
- 深入学习OpenCV检测及分割图像的目标区域
- 步进电机之步进电机驱动器使用说明
- 解读SPSS多元方差分析中的多因素多变量的相互影响
- php源码安装图文教程_安装PHP的教程及说明(图文详解)
- 无限级分类处理成树形结构
- Handler之消息屏障你应该知道的
- rimraf : 无法加载文件 C:\Users\Admin\AppData\Roaming\npm\rimraf.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅
- 每日一练20210706
- 吴恩达机器学习笔记(自用)
- vue-cli · Failed to download repo vuejs-templates/webpack-simple: tunneling socket could not be esta
- 20190401每周精品之理财