为什么在build.gradle中把Maven Central放在JCenter前会找不到依赖?
报错原因
- 你用到的
id.zelory:compressor:2.1.0版本仅在JCenter发布,并未同步到Maven Central,且该版本的POM文件存在编写缺陷,内部包含一个无group、无版本标识的无效依赖,对应报错信息里的:unspecified:。 - 虽然你保留了JCenter在仓库列表末尾,但Gradle会按配置顺序优先从靠前的仓库拉取依赖元数据,部分Gradle版本对跨仓库的传递依赖匹配存在逻辑缺陷,优先从Maven Central查找不到该库的有效元数据时,后续即使在JCenter找到对应库,也会出现传递依赖解析失败的问题。
解决方案
可以根据实际需求选择以下任意一种方案:
- 升级Compressor版本:该库作者后续已将新版本发布到Maven Central,直接将依赖版本升级到
3.0.1及以上即可,该版本不存在POM缺陷,完全适配Maven Central,无需再依赖JCenter拉取这个库。 - 配置仓库匹配规则:如果暂时不想升级版本,可以在build.gradle中添加规则,明确指定
id.zelory分组的依赖仅从JCenter拉取,避免Gradle优先去Maven Central查找导致解析失败,配置示例如下:
allprojects { repositories { google() mavenCentral() jcenter { content { // 仅允许从jcenter拉取该分组的依赖,其余依赖不会走jcenter includeGroup "id.zelory" } } } }
- 排除无效传递依赖:如果你确认该无效依赖不影响实际运行,可以在引入Compressor时手动排除这个无标识的依赖,示例如下:
implementation('id.zelory:compressor:2.1.0') { exclude group: '', module: 'unspecified' }
内容的提问来源于stack exchange,提问作者oligofren
相关产品推荐
相关产品推荐

