基础知识回顾
你是否在运行程序的时候经常会遇到 类似NoSuchMethodError,ClassNotFoundException这样的错误?而明明引入了这个依赖,还是找不到,我引入的是2.0.0版本的,为什么使用的确是另一个版本呢?其实,如果我们理解了maven的依赖原理,这些问题就能够轻松的解决啦!
maven依赖范围与传递性依赖
依赖范围
maven中有五种依赖范围,分别是:
- compile 编译依赖范围(默认)
- test 测试依赖范围,例如:JUnit
- provide 已提供的依赖范围,对于编译和测试有效,但运行无效,例如servlet-api,编译和测试项目的时候需要此依赖,但运行时,容器已经提供,无需此依赖。
- runtime 运行时依赖范围。对于测试和运行时需要,但编译时不需要。例如:JDBC驱动,项目编译时,使用的是JDK提供的JDBC接口,在执行测试和运行代码时需要实现JDBC接口的驱动。
- system 系统依赖范围。使用时,必须通过systemPath元素显示的指定依赖文件路径。而不通过maven仓库所解析。
传递性依赖和依赖范围
最