六.依赖

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