Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者
2021/11/21 1:40:27
本文主要是介绍Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文是系列文章《Maven 源码解析:依赖调解是如何实现的?》第五篇,主要介绍同一个文件内声明,后者覆盖前者的原则。请按顺序阅读其他系列文章,系列文章总目录参见:https://www.cnblogs.com/xiaoxi666/p/15583241.html。
场景
这次我们让 A 直接依赖 X,且在 A 的 pom.xml 中声明两次 X,分别为 1.0 和 2.0 版本。内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>mavenDependencyDemo</artifactId> <groupId>org.example</groupId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>A</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>X</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.example</groupId> <artifactId>X</artifactId> <version>2.0</version> </dependency> </dependencies> </project>
源码
这个比较简单,不涉及调解器,我们直接对着图看一下主流程:
小结
从源码可以看到,如果在同一个 pom 文件内,声明了两个 groupId 和 artifactId 完全相同的依赖,则会以最后一个声明的以来为准。因为在实现层面,它们是保存在 Map 中的,后一个依赖会把前一个依赖覆盖掉。这也印证了该原则的名称:同一个文件内声明,后者覆盖前者。
其实,控制台已经输出了警告,如果你仔细观察的话就会发现:
对应的源码在这里:
这篇关于Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南