Maven依赖管理

Maven依赖管理

一、scope 依赖氛围
Maven依赖管理
 其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

1、compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2、test:测试依赖范围。只对于测试classpath有效
3、provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4、runtime:运行时提供。例如:jdbc驱动

二、依赖传递
1、直接依赖和间接依赖
test2 依赖 test1,test3依赖test2,test2 直接依赖 test1,test3间接依赖test1
Maven依赖管理
当第二依赖的范围是compile的时候,依赖可以传递
当第二直接依赖的范围是test的时候,依赖不可以传递
provided(表示告诉编译器这个包以后不要打包到War的lib包中,比如Servlet包)和runtime,一般很少用,可以不用掌握。

三、依赖冲突
假如test1使用junit4.10依赖,并且scope是compile,那test2,test3都可以使用test1的junit4.10,因为传递下来了。
假如test2使用junit4.9依赖,那test3会使用【就近的一个依赖】,也就是使用junit4.9。

四、可选依赖
true/false 是否可选,也可以理解为是否向下传递。
在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false。
Maven依赖管理
五、排除依赖
exclusions可用于排除依赖,注意exclusions是写在dependency中Maven依赖管理