依赖管理
依赖传递
- 直接依赖:在当前项目中用依赖配置建立起的引用关系
- 间接依赖:当前项目引用的资源A如果还依赖其他资源B,那么当前项目间接依赖其他资源B
依赖传递冲突
- 路径优先:当依赖中出现相同类型的资源时,依赖的层级越深,优先级越低,反之,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的优先配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
- 可选依赖指对外隐藏当前所依赖的资源----不透明,通过optional标签
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<optional>true</optional>
</dependency>
排除依赖
- 排除依赖指主动断开和资源的依赖关系,被排除的资源无需指定版本
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
- 概念:依赖的jar默认可以在项目中的所有地方使用,通过scope标签指定其作用范围
- 作用范围:
- 主程序范围(main)
- 测试程序范围(test)
- 是否参与打包(package指令范围内)
DependecyManageMent 的理解(重要)
- dependecyManagement通常加在父项目上,用于依赖版本管理,但他只是声明依赖的版本,并不会真正的引入依赖。子模块需要用到某个依赖的时候,就不需要再加version了,这样一来就统一了子模块的依赖版本.