问题摘要
这几天需要学习一个大数据的项目,需要导入一些依赖,然而IDEA下载依赖遇到如下问题: )
Could not find artifact org.apache.flink:flink-shaded-hadoop-3-uber:pom:3.1.1.7.2.1.0-327-9.0 in aliyun (https://maven.aliyun.com/repository/public)
发现问题
这个报错的大意是,无法在阿里云的中央仓库找到 flink-shaded-hadoop-3-uber
这个依赖。
去MVN中查看一下这个依赖:
有一行提示:这个依赖需要在Cloudera
仓库中下载,这意味着阿里云中央仓库无法下载这个依赖
但是我pom文件中已经添加了相关repository
:
为什么IDEA仍然去阿里云仓库中添加依赖呢 ?
解决问题
折腾一番,得到最终解释如下:
-
对于依赖设置,pom文件遵循的原则是 局部 > 全局
-
查看 Effective Pom 中的
repositories
标签
-
可见
<repositories>
标签可以包含多个repository
,并且默认包含中央仓库在最后的位置。记住每个repository
的id
标签 -
Maven查找仓库流程
-
获取
pom.xml
中的repository
集合 -
在
settings.xml
文件中寻找mirrors
元素 -
repository
的id
和mirror
中的每个mirrorOf
依次匹配,如果二者相同,则该mirror
替代该repository
。如果未找到,则使用其本身。
-
-
由于
nexus-aliyun
镜像!cloudera
排除了cloudera
仓库,在 阿里云公共仓库被匹配! (图中修改过 mirrorOf 标签,原本是 * ,意味着匹配所有仓库) -
更改
mirrorOf
标签为central
,现在cloudera
标签在settings.xml
文件中未有仓库匹配,故使用其自身下载依赖。问题解决。
踩坑感想
- 网上的博客质量参差不齐,笔者刚开始学习Java时,跟着教程配置过阿里云镜像用于加速下载依赖,但是这里的镜像匹配范围过大,故导致一个BUG的发生。