maven依赖
maven本身就是作为一个项目管理工具,管理项目中所依赖的jar包,所以maven的配置中存在了很多的依赖
1 | <dependencies> |
依赖范围scope
依赖的范围有六种
- compile 默认值,所有阶段均生效,打包
- 对主程序是否有效(main):有效
- 对测试程序是否有效(test):有效
- 是否参与打包:参与
- test 只在测试时使用,用于编译和运行测试代码,不会随项目发布
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- provided 编译器有效,运行期不需要,不会打入包中
只参与开发环节,部署运行时不需要,在服务器上存在,如servlet-api.jar,编译和测试时需要,但是在运行项目时,由于容器已经提供,则不需要重复的引入- 对主程序是否有效:有效 - 对测试程序是否有效:有效 - 是否参与打包:不参与
- runtime 编译不需要,运行期有效,需要打入包中
运行时有效,编译时无效,如JDBC
- system
不从maven仓库获取,通过systemPath指定jar路径
- import
导入依赖范围,用于一个dependencyManagement对另一个dependencyManagement的继承
依赖原则
依赖的传递性 非compile范围的无法传递
依赖路径最短优先原则
项目依赖了两个jar包,其中A-B-C-D , A-D。由于第二条路径最短,所以项目使用的是第二个D。
pom文件中声明顺序优先
路径距离相同的情况下,先声明者优先,dependency的声明顺序
覆写优先
子pom内声明的优先于父pom中的依赖
依赖排除
有时候可能会出现依赖的版本冲突,此时需要将冲突的依赖排除掉,可以使用<exclusions>
来进行依赖排除
1 | <dependency> |