六.依赖
1.什么是依赖
在使用Maven工程的时候,工程中会存在一些依赖关系
相当于IDEA中的dependencies配置
可能依赖的是第三方jar包,也可能依赖的是另一个Maven工程
我们需要对这些依赖进行配置
根据配置找到对应的资源
查找顺序:本地仓库–>远程仓库
2.依赖的配置
依赖在pom.xml中进行配置
dependencies
标签
- 所有依赖配置的父标签
- 配置当前工程中所需要的的所有的依赖
dependency
标签
- 配置电气概念Maven工程所需要的某一个依赖
- 一个
dependency
标签对应一个依赖的配置 - 其存在一些子标签
-
groupId
:组织机构 -
artifactId
:模块名称 -
version
:版本号 -
scope
:作用范围
3.scope值
scope标签表示当前依赖的作用范围,其值有五种
- compile
- 默认值,当没有配置scope的时候,默认使用compile
- 表示当前依赖对整个项目都生效
- 在编译、运行、测试时均有效
- test
- 测试作用域
- 表示当前依赖只对测试程序有效
- provided
- 表示当前依赖对整个项目都生效
- 但是该作用范围中的依赖不参与打包与部署
- 在编译、测试时有效,但是在运行时无效
- runtime
- 运行时所依赖
- 在运行、测试时生效,但是在编译时无效
- system
- 在编译、测试时有效,但是在运行时无效
- 与provided的区别在于
- 使用system范围的依赖必须通过systemPath指定依赖文件的路径
- 由于这种类型的依赖不是通过Maven仓库解析的,而是与本机系统绑定
- 可能造成构建的不可移植
- 因此,该方式不建议使用
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
4.依赖的特性
- 依赖的传递性
- 当前Maven工程的依赖如果存在其他依赖
- 会在当前工程中自动下载其对应的依赖
- 如果依赖的范围是test,则不需要下载
- 最短距离依赖
- 当当前工程与依赖的工程均包含某个依赖的时候
- 则不会再去下载依赖的工程的某个依赖
- 而是直接使用当前工程的依赖
- 如果存在多种依赖管理
- 例如:HelloFriend依赖于Hello,HelloThree依赖于HelloFriend
- 此时Hello中存在junit4.11,HelloFriend中存在junit4.12
- 由于HelloFriend距离HelloThree最近,因此选择HelloFriend中的junit4.12