依赖配置

1
2
3
4
5
6
7
8
9
10
11
12
<!-- jar-->
<dependencies>
<!— -->
<dependency>
<!— id-->
<groupId>junit</groupId>
<!— id-->
<artifactId>junit</artifactId>
<!— -->
<version>4.12</version>
</dependency>
</dependencies>

依赖传递

image.png

  • 依赖具有传递性
    • 直接传递:
      • 在当前项目中通过依赖配置建立的依赖关系。
    • 间接传递:
      • 被资源的资源如果依赖其它资源,当前项目间接依赖其它资源。

image.png

  • 依赖传递冲突问题
    • 路径优先:
      • 在依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
    • 声明优先:
      • 当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
    • 特殊优先:
      • 当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

可选依赖

  • 可选依赖指对外隐藏当前依赖的资源:不透明
    1
    2
    3
    4
    5
    6
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <optional>true</optional>
    </dependency>

排除依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>

依赖范围(作用域)

  • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

  • 作用域范围:image.png

    • 主程序范围有效(main文件夹范围内)。
    • 测试程序范围有效(test文件夹范围内)。
    • 是否参与打包(package指令范围内)。
  • 依赖范围传递性

    • 带有依赖范围的资源在进行传递时,作用范围将受到影响。image.png