2.1 直接依赖与间接依赖
2.2 依赖传递
2.2.1 Jar包分类
(1)编译、运行、打包时均不需要的Jar包
测试用的Jar包属于该类型,例如junit、spring-test
(2)编译、运行时需要,但打包时不需要的Jar包
servlet-api,jsp-api属于该类型
(3)编译时不需要,但运行、打包时需要的Jar包
mysql驱动属于该类型
static {
Class.forName(“com.mysql.jdbc.Driver”);
}
(4)编译、运行、打包时均需要的Jar包
大多数jar包都属于该类型
2.2.2 依赖传递范围设定
(1)test
仅适用于第一类Jar包。其不会向下传递。
(2)provided
仅适用于第二类Jar包。其不会向下传递。
(3)runtime
仅适用于第三类Jar包。其会向下传递。
(4)compile
默认值。适用于第四类Jar包。其会向下传递。
(5)system
<systemPath>${basedir}/lib/xxx.jar</systemPath>
(6)import
2.3 可选传递与排除依赖
可选传递
<optional/>值为true,表示当前依赖是可选的,即可要可不要。其不会向下传递。
<optional/>值为false,默认值,表示当前依赖是不可选的,即是必须要的。其会向下传递。
排除依赖
2.4 依赖冲突
2.4.1 直接依赖冲突
在同一个工程中出现了同一个依赖的不同版本,系统会自动选择最后导入的那个版本。
2.4.2 间接依赖冲突
间接依赖冲突在工程中会出现问题,所以需要手工删除发生冲突的依赖。