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