Maven为何仅在SNAPSHOT仓库中查找非快照版本的依赖构件?
问题根本原因
你遇到的这个现象核心是Maven的仓库版本匹配规则导致的:
- 你配置的
snapshots仓库仅显式开启了SNAPSHOT版本的拉取权限,没有显式禁用正式版本(Release)的拉取权限,Maven对于未显式配置releases.enabled的仓库,默认该值为true,也就是说这个SNAPSHOT仓库同时会被Maven当作正式版本的候选查找仓库。 - Maven查找构件时会严格按照
repositories节点中配置的仓库顺序依次遍历查询,你的配置里central仓库在前,snapshots仓库在后:当Maven在central仓库中找不到myGroup:myBom:pom:1.0.0这个正式版本构件时,就会按顺序继续到下一个仓库也就是snapshots仓库中查找,最终查询失败抛出错误。
解决方案
你可以按照以下两个步骤修复问题:
- 给
snapshots仓库显式添加正式版本禁用配置,避免Maven去快照仓库查找正式版本构件,修改后的snapshots仓库配置如下:
<repository> <snapshots> <enabled>true</enabled> </snapshots> <!-- 新增以下配置 --> <releases> <enabled>false</enabled> </releases> <id>snapshots</id> <name>public-snapshots</name> <url><pathToArtifactory>/public-snapshots</url> </repository>
- 确认
myGroup:myBom:pom:1.0.0构件确实已经上传到你配置的central仓库对应的/public制品库路径下,如果未上传请先上传该构件,或者调整版本号匹配实际已上传的构件版本。
内容的提问来源于stack exchange,提问作者hublo
相关产品推荐
相关产品推荐

