依赖传递
maven的依赖,可以形象的展示为一颗树,每一个节点都可以引入更多的依赖节点。那么当依赖树引入了一个包的多个版本,maven如何决定使用哪一个版本呢?原理很简单:最短路径
。
如何理解最短路径
?
- 层级越少的,优先级越高。
- 同一层级的,越靠前,优先级越高。
依赖范围
依赖范围一共包括如下几种,分别代表的是jar包在什么环节要被引入。
-
compile
这个是默认的依赖范围,代表从编译阶段就需要被引入。 -
provided
这个代表该依赖在运行时runtime
是由jdk或者容器来提供,无需引入。因此provided
的包只有在本地编译和测试环节才会被引入,运行时不会被引入。比如我们常见的servlet-api的包,就会申明为provided阶段。 -
runtime
运行时依赖,代表这个包在编译的时候是不需要的,只有在运行时以及测试时才需要被依赖。 -
test
代表这个包在生产环境是不需要的,只有在执行test时才需要。 -
system
-
import
在<dependencyManagement>
使用时,可以将其他的POM类型的<dependencyManagement>
通过import
的方式引入,从而构建出整体所需的一个依赖管理集合。
依赖排除
参考资料
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
网友评论