美文网首页
Maven 依赖树的解析规则

Maven 依赖树的解析规则

作者: 被称为L的男人 | 来源:发表于2020-11-12 22:12 被阅读0次

对于 Java 开发工程师来说,Maven 是依赖管理和代码构建的标准。遵循「约定大于配置」理念。Maven 是 Java 开发工程师日常使用的工具,本篇文章简要介绍一下 Maven 的依赖树解析。

依赖树结构

在 pom.xml 的 dependencies 中声明依赖包后,Maven 将直接引入依赖,并通过解析直接依赖的 pom.xml 将传递性依赖导入到当前项目,最终形成一个树状的依赖结构。

原则:深度优先遍历依赖,并缓存节点剪枝。比如下图:

  • A→B→D→E/F
  • A→C→D

在第二步A→C→D时,由于节点D已经被缓存,所以会立即返回,不必再次遍历E/F,避免重复搜索。

image

依赖冲突

但是假如 2 个包同时依赖了同一个 jar 包,但是这个 jar 包版本不同,规则是什么样的呢?比如下图 A 通过 B 和 D 引入了 1.0 版本的 E,同时 A 通过 C 引入了 2.0 版本的 E。针对这种多个版本构建依赖时,Maven 采用「短路径优先」原则,即 A 会依赖 2.0 版本的 E。如果想引入 1.0 版本的 E,需要直接在 A 的 pom 中声明 E 的版本。

image

如果 Java 项目过于庞大,或者依赖传递过于复杂时,可以使用 dependencyManagement 定义默认的版本号,一次定义全局生效,避免开发者自行管理依赖的版本。

依赖循环

比如:A 依赖了 B,同时 B 又依赖了 A。这种循环依赖可能不会直接显现,但是可能会在一个很长的调用关系显现出来,也可能是模块架构的设计不合理。

我们可以使用 mvn dependency:tree -Dverbose | grep cycle 来判断项目中是否存在「循环依赖」。

依赖排除

我们可以使用 exclusion 来解决依赖冲突,但是 exclusion 会降低 Maven 依赖解析的效率,因为对应的 pom 文件不能缓存,每次都要重新遍历子树。

对于依赖排除:

  • exclusion 会造成依赖重复扫描和缓存。
  • 在距离根节点越远的 exclusion,影响的范围越小。
  • 依赖树高度越高,引入 exclusion 的代价越大。

依赖分析

IDEA 插件

使用 IDEA 的话,可以在对应项目中右击,选择 Diagrams -> Show Dependencies。

image

Maven 命令行

mvn dependency:tree -Dverbose

相关文章

  • Maven 依赖树的解析规则

    对于 Java 开发工程师来说,Maven 是依赖管理和代码构建的标准。遵循「约定大于配置」理念。Maven 是 ...

  • maven---常见错误

    关于maven构件解析步骤请看maven---6仓库-->6从仓库解析依赖的机制 1依赖解析错误 1.1错误结果 ...

  • Maven坐标和依赖

    摘要: Maven,坐标,依赖,依赖传递,依赖范围Maven的一大功能是管理项目依赖,为了能自动化解析任何一个ja...

  • maven的依赖仲裁规则 (dependency mediati

    规则来源 maven官网中的 依赖机制[https://maven.apache.org/guides/intro...

  • 深入浏览器渲染

    整体流程 解析 HTML,构建 DOM 树 解析 CSS, 生成 CSS 规则 合并 DOM 树和 CSS 规则,...

  • RocketMQ Hello

    《RocketMQ实战与原理解析》 Maven依赖 发送消息 接收消息

  • maven

    maven是什么 1.pom文件解析 1.1 maven依赖(GAV参数) 1.1.1 scope类型及意义 co...

  • 回流与重绘

    浏览器渲染过程 解析HTML生成DOM树。 解析CSS生成CSSOM规则树。 将DOM树与CSSOM规则树合并在一...

  • 简述浏览器的渲染机制

    DOM树的解析过程(Firefox) 上述代码的DOM树会被解析成这样: CSS规则树的解析过程(Firefox)...

  • 面试题 -- 简述页面渲染的过程

    解析HTML生成DOM树 解析CSS生成CSSOM规则树 将DOM树与CSSOM规则树合并在一起生成渲染树 遍历渲...

网友评论

      本文标题:Maven 依赖树的解析规则

      本文链接:https://www.haomeiwen.com/subject/oidmbktx.html