前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven 依赖调解源码解析(一):开篇

Maven 依赖调解源码解析(一):开篇

作者头像
xiaoxi666
发布2021-11-24 09:56:34
5500
发布2021-11-24 09:56:34
举报
文章被收录于专栏:xiaoxi666的专栏

前言

相信久经沙场的 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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实验环境
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档