zoukankan      html  css  js  c++  java
  • Maven 依赖调解源码解析(一):开篇

    本文是系列文章《Maven 源码解析:依赖调解是如何实现的?》第一篇,主要做个开头介绍。并为后续的实验做一些准备。系列文章总目录参见:https://www.cnblogs.com/xiaoxi666/p/15583241.html

    前言

    相信久经沙场的 Java 开发同学们,一定对 Maven 这个工具不陌生。Maven 的依赖调解原则,便是经常聊到的话题。它是为了解决 groupId 和 artifactId 完全相同的依赖,应该取哪个版本号的问题。

     

    下面列举出一些原则:

    • 原则一:传递依赖,路径最近者优先。

    • 原则二:传递依赖,第一声明者优先。

    • 原则三:同一个文件内声明,后者覆盖前者。又称作:同名覆盖。

    • 原则四:dependencyManagement 版本锁定。

     

    以上这些原则,你一定都知道,​但你清楚 Maven 源码是如何实现它们的吗?

    废话不多说,让我们准备进行实现,到 Maven 的源码世界逛逛!

    实验环境

    • JDK 1.8

    • apache-maven-3.6.3(源码下载:https://archive.apache.org/dist/maven/maven-3/)

    • Maven3.6.3 的配套核心依赖 dependency:tree,包括两个项目:

    • maven-dependency-plugin-2.8(源码下载:https://archive.apache.org/dist/maven/plugins/)

    • maven-dependency-tree-2.1(源码下载:https://archive.apache.org/dist/maven/shared/)

     

     

     

    简单说明一下:

    • apache-maven-3.6.3 包含了 Maven 的核心代码,以及调用各种插件的入口。

    • dependency:tree 是 Maven 的核心依赖插件,它在依赖解析时发挥重要作用,平时我们也经常使用命令 mvn dependency:tree 输出目录树进行查看。这个插件由两部分组成,分别是 maven-dependency-plugin 和 maven-dependency-tree;前者包含了与「依赖」相关的多种插件,其中就包括 tree 插件;后者则是 tree 的具体实现。

     

    为了进行实验,我们需要搭建一个 Demo 项目,并用 Maven 管理依赖包。该项目名称为 mavenDependencyDemo,我们在其中创建五个模块 A、B、C、D、X。结构如下:

    .

    ├── A

    │   ├── pom.xml

    ├── B

    │   ├── pom.xml

    ├── C

    │   ├── pom.xml

    ├── D

    │   ├── pom.xml

    ├── X

    │   ├── pom.xml

    ├── pom.xml

     

    后面我们会在分析每条原则时,修改不同模块的依赖。

    『注:本文来自博客园“小溪的博客”,若非声明均为原创内容,请勿用于商业用途,转载请注明出处http://www.cnblogs.com/xiaoxi666/』
  • 相关阅读:
    Linux基础3-1 Bash及其特性
    三、手写ORM实现数据库更新
    三、TCP协议
    一、OIS七层模型及数据传输过程
    泛型缓存原理
    树莓派公网服务器实现frp内网穿透
    Dto数据传输对象
    Ubuntu下 Nginx静态代理部署网页常见报错
    JWT权限验证
    解决传入的请求具有过多的参数,该服务器支持最多 2100 个参数
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/15583206.html
Copyright © 2011-2022 走看看