9

Gradle 可以设置多个存储库,例如 maven 和 jcenter。但是我意识到 gradle 总是先使用 jcenter 即使我把 maven 放在 jcenter 之前(如下所示)。是否可以使 maven(本地 repo 和更快)具有更高的优先级?

## in file build.gradle
allprojects {
    repositories {
    maven { url "http://nexus.mucompany.com/nexus/service/local/repositories/releases/content/" }
    jcenter()
}
4

2 回答 2

9

我想将此作为评论提出,但还没有足够的代表:-/

你能发布输出gradle --debug让你认为它优先从 jcenter 解决吗?

gradle文档包含以下内容:

一个项目可以有多个存储库。Gradle 将按照指定的顺序在每个存储库中查找依赖项,并在包含所请求模块的第一个存储库处停止。

本地快速确认显示该订单在自定义 maven 存储库和jcenter()

于 2015-11-04T18:23:10.540 回答
3

除此之外,至少在较新的 gradle 版本中,顺序很重要:

考虑到存储库的顺序很重要时,这一点更为重要。

…</p>

✨ 声明的顺序决定了 Gradle 在运行时如何检查依赖项。如果 Gradle 在特定存储库中找到模块描述符,它将尝试从同一存储库下载该模块的所有工件。您可以了解有关Gradle 解析机制的内部工作原理的更多信息。

来源:gradle 5.4.1声明多个存储库

或者这是您特定 gradle 版本中的错误 - 我的回答可能会在 2k19 那天“有点晚”,因为您的问题来自 15 年;D

(至少在 Gradle 3.5 中定义类似

一个项目可以有多个存储库。Gradle 将按照指定的顺序在每个存储库中查找依赖项,并在包含所请求模块的第一个存储库处停止。

来源: gradle 3.5 Java 项目的依赖管理

一个常见的问题是,更高优先级的存储库和/或本地缓存已损坏!通常有足够多的人工 jcenter 代理包含不情愿的 POM 声明,但没有 jars。然后,您必须清理工件。类似于本地存储库。

您可以尝试通过运行 gradle--refresh-dependencies并启用最佳情况-i日志记录来忽略本地缓存,以查看请求的去向以及结果是什么。

看看如何强制 gradle 重新下载依赖项?


第二种选择从 gradle 5.1 开始,您始终可以声明过滤器

请参阅 gradle 5.4.1声明存储库过滤器

对我来说,我忽略了来自 jcenter 的任何 com.android 包,这会加快搜索速度并减少上面提到的已知问题

于 2019-06-19T14:55:08.987 回答