Maven 依赖调解源码解析(七):总结

在本系列文章中,我们搭建了一个简单的多模块项目,以实验的形式,从源码角度解析了四种依赖调节原则。涉及到了传递依赖的两种调解原则、一种同文件内的覆盖原则,以及 dependencyManagement 依赖锁定原则。其中,传递依赖的两种调解原则涉及到 NearestConflictResolver 冲突调解器;而同文件内的覆盖原则最简单,就是简单的 Map 覆盖;最后,dependencyManagement 依赖锁定原则稍有些复杂,因为它涉及到了 dependencyManagement 的版本解析,并以解析出来的版本号为准。

在现实工作中,这几种依赖关系可能同时存在。尤其在大型工程中,dependencyManagement 版本锁定运用非常广泛,如果能从源码角度掌握其运行原理,一定会提升你对 Maven 的运用能力。

在阅读源码的过程中,我们学到了什么?

首先,我们了解了 Maven 依赖调解实现原理,以后面对各种输出信息,能够做到心中有数。稍微拓展一下,各种依赖管理工具的核心原理其实都差不多,无非就是管理各种依赖版本。希望本文能为你理解包管理工具的实现思路提供些许参考。

其次是设计方面的考量。Maven 提供了核心实现,并且预留了各种扩展点,可以让不同的插件实现不同的功能。这种开发模式可以非常方便功能扩展,对于一款软件的成长是很有利的。业界也有很多采用这种思路开发的产品,比如你熟悉的 Atom。

再说说算法,其实就是很经典的递归算法,以及常提到的备忘录(Map 存储已经解析过的依赖)。

最后,谈谈设计模式的体现。上面提到的源码就有几种,比如模板模式(不同冲突调解器的实现)、访问者模式(参照 visit 方法)、观察者模式(各种 Listener,事件产生时打印一些信息),以及桥接模式(dependency:tree 的实现其实是一个桥,类似于 slf4j 的模式)等等。

当然,你还学会了一种简单方便的 Maven 源码调试方法,哈哈。

Original: https://www.cnblogs.com/xiaoxi666/p/15583238.html
Author: xiaoxi666
Title: Maven 依赖调解源码解析(七):总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620834/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • VMware Workstation 15Pro 的安装与使用

    1,在VMware Workstation 15 Pro官网下载 2鼠标右键 以管理员身份运行 3,点击下一步 4,勾选[我接受许可协议中的条款],然后点击[下一步] 5点击[更改…

    Java 2023年6月7日
    094
  • PHP上传文件类型检查

    Original: https://www.cnblogs.com/wxweven/archive/2012/11/13/2768410.htmlAuthor: wxwevenTi…

    Java 2023年6月9日
    068
  • JavaWeb_(视频网站)_四、博客模块2

    summernote富文本功能添加 前台submit-post-blog.html 上传图片到图文本框summernote中 修改后台通过Ajax上传图片请求 @RequestMa…

    Java 2023年5月29日
    082
  • 通过刷题HTML遇到的问题

    通过刷题HTML遇到的问题 1、有关选择器的权重问题 1.通配符选择器和继承:权重为0,2.标签选择器:权重为00013.类选择器:权重为00104.id选择器:权重为01005….

    Java 2023年6月14日
    089
  • IO多路复用

    划分内核态/用户态 之前说过七层/五层/四层的 网络模型,我们从网络模型可以看出 &…

    Java 2023年6月7日
    089
  • 9.NIO 核心1:缓冲区(Buffer)

    static xxxBuffer allocate(int capacity):创建一个&a…

    Java 2023年6月5日
    093
  • Error: Package: 1:openssl-devel-1.0.2k-19.el7.x86_64 (base) Requires: openssl-libs(x86-64

    假如我们在centos7上安装nginx时,会附带的安装一个openssl-devel的包,但是我们安装的时候会出现以下报错:可能是因为openssl-devel的版本太低。 Er…

    Java 2023年6月5日
    0140
  • Java 重载

    java允许一个类中含有多个同名方法,但要求各个同名方法的形参数量或类型或顺序不一致。 调用方法时按照传入的实参调用对应的方法,这就叫重载。 如果同名方法且形参一致,那就不叫重载了…

    Java 2023年6月5日
    079
  • XenServer 5.5 断电重启虚拟机磁盘丢失的修复

    1.现象 公司云平台使用的是XenServer 5.5,版本比较老了。最近几天因为机房改造,导致云环境断电,重启之后发现有2台机器无法ping到,所以再次重启,登录修复网卡,最后发…

    Java 2023年5月30日
    071
  • 红黑树

    2-3-4树 JAVA技术交流群:737698533 定义 所有的叶子节点都拥有相同的深度 节点只能是2-节点,3-节点,或者4-节点 2节点 包含一个元素的节点,有两个子节点 3…

    Java 2023年6月6日
    092
  • 14.springboot+mybatis+dubbo+zookeeper全套工程

    1.构建普通maven工程 New→Project→Maven 2.编写父级工程名 3.maven资源的存储位置 4.核对工程名和模块名称第一次需要时同一个 5.完成项目后,需要将…

    Java 2023年6月13日
    071
  • java.net.ConnectException: Connect to XXXhost:XXXport failed: 拒绝连接 (Connection refused)

    公司内部的优付系统通过http调用外部服务商系统的API。上周五夜间,服务端系统发版期间,客户端在通过http调用服务端接口时出现一堆 “拒绝连接 (Connectio…

    Java 2023年5月29日
    078
  • Spring Boot + Spring Cloud 构建微服务系统(十):配置中心(Spring Cloud Bus)

    技术背景 我们在上一篇讲到,Spring Boot程序只在启动的时候加载配置文件信息,这样在GIT仓库配置修改之后,虽然配置中心服务器能够读取最新的提交信息,但是配置中心客户端却不…

    Java 2023年5月30日
    070
  • OpenJDK 发行版本(国内和国外)

    发行版本 OpenJDK 发行版 公司 主页 亚马逊 腾讯 阿里 微软 华为 Zulu JDK Azul The Eclipse Temurin eclipse Amazon Co…

    Java 2023年6月9日
    084
  • TCP三次握手

    大佬链接:https://www.eet-china.com/mp/a44399.html TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试…

    Java 2023年6月7日
    080
  • cassandra 数据到Java对象的映射绑定

    类似Hibernate和MyBatis的关系映射,自动帮你将查询数据或是修改的参数进行数据映射和绑定。支持查询后返回数据ResultSet到Java对象的映射,支持修改、删除、查询…

    Java 2023年5月29日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球