maven学习笔记(五) maven的依赖
来源:互联网 发布:关口知宏 对中国评价 编辑:程序博客网 时间:2024/06/05 21:57
完整的标签
之前记录了maven最基本的坐标,maven坐标都是放在dependency标签内的,表示该项目需要依赖于这个jar包。一般来讲,groupId,artifactId,version是最基本dependency元素,一个完整的dependency标签包含以下元素:
<dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <type>...</type> <scope>...</scope> <optional>...</optional> <exclusions> <exclusion> ... </exclusion> </exclusions> </dependency>
下面是上一篇没有讲到的几个标签的含义:
依赖范围
在maven项目中,会有三套classpath可以使用,classpath的作用就是告诉java环境,在哪些目录下可以找到所需要的jar包。这三种分别是编译、测试和运行。scope的取值范围有一下几个:yes表示当前环境可用
compile 是默认的范围,也就是说我们不配置的话,默认是所有环境都可以使用的,但是比如说juint我们一般只会在测试用到我们就可以设为test。
传递性依赖
传递性依赖的概念很简单,如下图,如果我的项目依赖jarB比如说是spring-webmvc而jarB又需要jarC比如spring-core才能运行,这样的依赖就叫传递性依赖。不过使用maven不用担心这个,maven会自动将依赖的jar导入进来。避免我们手动操作带来的麻烦,因为有时候我们不知道jar之间的依赖关系。

当jarB与jarC的依赖范围不同时,往往会取较小的为传递依赖的范围,参照上面的表格,比如jarB的依赖范围是compile,而jarC的依赖范围是runtime,那么最后传递依赖的范围就是runtime,不过我们一般都默认使用compile,所以传递依赖不太会碰到范围的问题。
依赖路径选择原则
因为仓库中很多jar都是依赖的,所以有时候会出现不同路径的传递性依赖,比如下面的这种情况。

项目A传递性依赖D,maven就有三种路径可以选择,maven选择的原则是这样的:
1.路径短的优先,就排除了路径1;
2.长度相同的情况下,根据POM中声明依赖的顺序,如果E中先声明依赖D那就选路径2.
可选依赖
可选依赖适用于下面这种情况,B同时依赖于C和D,这时候在项目B的POM中,C,D的依赖配置中就会有optional标签,并且值为true。有些时候只需要其中一个就可以了,又或者C、D相互冲突,这时候我们就要进行选择。这个时候我们就要显式地在项目A的pom声明我们要用的C或者D。

排除依赖
exclusion标签是用来排除依赖的,想下面这种情况。本来B默认是依赖C的,但是我们想让他依赖D,不使用C。我们就需要在exclusion标签中写入C的依赖坐标,然后自己声明想要的D。

<dependency> <groupId>xxx</groupId> <artifactId>B</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>xxx</groupId> <artifactId>C</artifactId> <!--没有version--> </exclusion> </exclusions> </dependency> <dependency> <groupId>xxx</groupId> <artifactId>D</artifactId> <version>1.0.0</version> </dependency>
maven 查看依赖的命令
- maven学习笔记(五) maven的依赖
- Maven学习笔记(五)---maven的聚合和继承
- maven学习笔记(二) 依赖
- Maven学习笔记(坐标和依赖)
- Maven学习笔记(2) --- 依赖
- Maven学习笔记之Maven坐标依赖
- maven学习笔记3 各种maven依赖
- 【学习笔记】Maven依赖特性
- Maven学习笔记(四)---maven依赖关系中Scope的作用
- Maven学习笔记(四)——Maven的依赖管理
- Maven学习笔记(四)——Maven的依赖管理
- Maven的核心笔记(5)maven的依赖范围
- Maven学习笔记(五)——Maven生命周期
- Maven学习笔记十一:Maven坐标和依赖(依赖范围)
- Maven学习笔记十三:Maven坐标和依赖(依赖调解)
- MAVEN学习(3)------MAVEN的坐标及依赖
- Maven学习笔记十:Maven坐标和依赖(依赖的配置)
- Maven学习笔记(五):仓库
- 在QT对话模中用webengine 无法加载WEB页的问题
- 查看webjoin下的tomcat的版本
- 144. Binary Tree Preorder Traversal
- Android中用TextView显示大量文字的方法
- php视频上传
- maven学习笔记(五) maven的依赖
- poj 3070 Fibonacci,不用打表的快速斐波那契
- Python ML环境搭建与学习资料推荐
- python常用语法
- 修改z-stack LED引脚出现引脚不可控
- hdu6092 Rikka with Subset(母函数+思维)
- Swift3.0 Swift中cell分割线靠左对齐,cell基类封装
- 网易笔试:买苹果
- oracle中逻辑与、逻辑或、逻辑与非函数的使用