1. 依赖配置
- 依赖指当前项目运行所需的jar包,一个项目可以设置多个依赖
- 格式:
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!-- 设置具体的依赖 -->
<dependency>
<!--依赖所属群组id-->
<groupId>junit</groupId>
<!--依赖所属项目id-->
<artifactId>junit</artifactId>
<!--依赖版本号 -->
<version>4.12</version>
</dependency>
</dependencies>
2. 依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
project03的依赖 – 直接依赖junit和log4j<!--设置当前项目所依赖的所有jar--> <dependencies> <!-- 设置具体的依赖 --> <dependency> <!--依赖所属群组id--> <groupId>junit</groupId> <!--依赖所属项目id--> <artifactId>junit</artifactId> <!--依赖版本号 --> <version>4.12</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependencies>
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
project02的依赖 – 直接依赖project03和log4j的1.2.13版本,通过project03间接依赖junit和log4j的1.2.14版本<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>com.itheima</groupId> <artifactId>project03</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
依赖传递冲突问题
- 路径优先 : 当依赖中岀现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先 : 当资源在相冋层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
3. 可选依赖
可选依赖指对外隐藏当前所依赖的资源—不透明,其他项目引用该项目为依赖时无法看到该项目的依赖
通过<optional>true</optional>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
4. 排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本—不需要,添加的依赖中有间接依赖不需要,排除
通过<exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
5. 依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过 scope标签设定其作用范围
- 作用范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包( package指令范围内)
scope的值:
scope | 主程序 | 测试程序 | 打包 | 范例 |
---|---|---|---|---|
compile( 默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
依赖范围传递性
- 带有依赖范围的资源在进行传递时,作用范围将受到影响