阅读 103

Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者

场景

这次我们让 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 中的,后一个依赖会把前一个依赖覆盖掉。这也印证了该原则的名称:同一个文件内声明,后者覆盖前者。

其实,控制台已经输出了警告,如果你仔细观察的话就会发现:

对应的源码在这里:


作者:xiaoxi666
链接:https://juejin.cn/post/7032920310286385159


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐