maven版本依赖原理解析

依赖传递

maven的依赖,可以形象的展示为一颗树,每一个节点都可以引入更多的依赖节点。那么当依赖树引入了一个包的多个版本,maven如何决定使用哪一个版本呢?原理很简单:最短路径
如何理解最短路径

  1. 层级越少的,优先级越高。
  2. 同一层级的,越靠前,优先级越高。
    例如下图中,依赖A的优先级为A1>A2>A3>A4,B的优先级为B1>B2
    image.png

依赖范围

依赖范围一共包括如下几种,分别代表的是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容