Maven学习归纳(四)——传递依赖和依赖的规则
一、传递依赖
官方文档解释的传送门:http://ifeve.com/maven-dependency-mechanism/
当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗?
例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 B.jar 呢?
这要看传递依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问
即 要使A.jar 依赖于C.jar 当且仅当C.jar的范围是compile

如下演示HelloWrold2项目依赖 ——》HelloWrold项目依赖——》junit
此时HelloWrold这个项目是有junit.jar包的,而HelloWrold2是没有junit这个jar包的,如下所示:

需要在被依赖的项目HelloWorld的pom.xml上改写

改写之后,项目就出现了需要间接依赖的的jar包

二、依赖原则
依赖原则目的:防止jar包的冲突
为了避免造成依赖重复,需要选择一个依赖路径
1. 路径最短优先原则
存在两个项目依赖同个类型但不同版本的jar包,这个时候会优先选择路径短的
项目配置情况:
HelloWrold2 依赖 HelloWrold
HelloWrold 依赖 Junit3.8 jar
HelloWrold 依赖 Junit4.0 jar
从图中看,显然junit3.8距离HelloWrold2更近点的
既然都拥有junit这个包,那么原本是 3.8 的 HelloWrold2 再依赖了HelloWrold后,会发生什么情况呢??

配置如下:

运行结果如图所示:此时HelloWrold保持原来的junit-3.8.jar不变

2. 路径长度相同
路径长度相同的情况下,又可以分为是否有在同一个pom.xml两种情况
2.1 覆盖:
如果在同一pom.xml文件中有2个相同的依赖;后面声明的会覆盖前面的依赖
但这里要说严禁使用本情况,严禁在同一个pom中声明两个不同的依赖

2.2 优先:
如果是在不同pom.xml中有2个相同的依赖;则先声明的依赖,会覆盖后面生命的依赖
如下HelloWorld2依赖项目HelloWorld,和项目HelloWorld3
HelloWorld与HelloWorld3都有不同版本的commons-fileupload.jar
显然,先写在前面的HelloWorld3的jar包被采用了

简单的依赖就完了呢~ o(* ̄▽ ̄*)o
Maven学习归纳(四)——传递依赖和依赖的规则的更多相关文章
- Maven学习笔记(四):协调和依赖
Maven协调具体的解释: Maven定义了这样一组规则:世界上不论什么一个构件都能够使用Maven坐标唯一标识.Maven坐标的元素包含groupId.artifactId.version ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- Maven学习(二) -- 坐标和依赖
标签(空格分隔): 学习笔记 坐标 实际就像在几何中,我们用一对坐标(x, y)来表示坐标系中唯一的点:或者我们可以用(经度,纬度)来表示地球上的某一个位置,在Maven的世界中,有坐标来唯一的表示项 ...
- Maven学习笔记2(坐标和依赖)
1.坐标 Maven坐标为各个构件建立了秩序,任何一个构件都必须明确自己的坐标,一个maven坐标是由一些元素确定的 <groupId>com.alivn.account</grou ...
- Maven学习(四)Maven 命令行选项
说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之 间必须有空格.如下面的例子: $ mvn help:describe -Dcmd=compiler:co ...
- Maven学习归纳(一)——简单的环境配置入门
一.Maven的基本概念 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的编译,测试,构建,报告和文档的软件项目管理工具和解决依赖关系的工具. 1.1 项目的构建 项目的构建 ...
- Maven学习小结(四 聚合与继承)
1.聚合 一次构建多个项目模块. 2.继承 为了消除重复,把很多相同的配置提取出来,例如groupid和version: 2.1 Maven中可以继承的POM元素 groupId :项目组 ID ,项 ...
- Maven学习归纳(三)——依赖添加依赖排除与项目整合
一.Maven的坐标 1. 坐标的定义 数学意义上的坐标可以是平面上的(x,y)也可以是空间上的(x,y,z),都可以确定一个质点的位置和方向. Maven中有很多构件,为了能够自动化解析任何一个构件 ...
- Maven 学习总结(三) 之 依赖管理
聚合 为了要一次构建多个项目,而不是到每个模块目录下分别执行mvn命令.maven聚合这一特性就是为该需求服务的.为此我们需要创建一个额外的模块aggregator, 然后通过该模块构建整个项目的所有 ...
随机推荐
- 基于Starling的mask实现
作为一个从c++转过来的程序员,flash原生的自定义mask实在是太好用,能方便实现各种效果,比如新手引导的高亮.viewport效果等.可惜starling的显示对象并不支持mask特性,查阅go ...
- 进程间通信与ipcs使用7例
进程间通信(IPC, inter-process communication)实现进程间消息的传递,对于用户地址空间相互独立的两个进程而言,实现通信可以通过以下方式: 由内核层面分配内存,两进程共享该 ...
- ethtool工具使用实例
使用ethtool工具可以查看和修改网卡(NIC卡)设备配置,下面我们来看ethtool的具体用法. 1.显示网卡属性 ethtool命令后直接跟网卡名称,可以显示关于该网卡的属性值: # ethto ...
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- 压力测试-jmeter
1. 场景描述 新申请的服务器,要压测下python算法程序最多能执行多少条数据,有几年没用压力测试工具-jmeter了,重新下载了最新版本,记录下,也希望能帮到准备使用jmeter做压测的朋友. 2 ...
- spring boot 打 war包
spring boot .spring cloud打 war包,并发布到tomcat中运行 1.pom文件修改 <packaging>war</packaging> 2.< ...
- 给定n个十六进制正整数,输出它们对应的八进制数。
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...
- jar在linux上运行
打jar后一直在linux远程的运行: nohup java -jar xxx.jar & CRT(打开时运行):(另外上传文件可使用“rz”命令,上传jar包) java -jar xxx. ...
- 【数据结构】9.java源码关于HashTable
1.hashtable的内部结构 基础存储数据的hash桶由Entry结构的数组存放而entry数据结构,有hash,key和value,还有一个指向下一个节点的引用next对象 这里就和hashma ...
- C# - 协变、逆变 看完这篇就懂了
1. 基本概念 官方:协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型.[MSDN] 公式: ...