是否可以使用优先级高于jcenter的maven存储库

时间:2015-11-04 17:30:15

标签: maven gradle jcenter

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

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

2 个答案:

答案 0 :(得分:8)

我想将此作为评论,但尚未获得足够的代表: - /

您可以发布gradle --debug的输出,让您认为它优先从jcenter解析吗?

gradle docs包含以下内容:

  

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

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

之间得到兑现

答案 1 :(得分:0)

除了事实,至少在较新的gradle版本中,顺序很重要:

  

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

     

...

     

✨声明的顺序决定了Gradle在运行时如何检查依赖关系。如果Gradle在特定存储库中找到模块描述符,它将尝试从同一存储库下载该模块的所有工件。您可以详细了解Gradle’s resolution mechanism的内部运作方式。

来源:gradle 5.4.1 Declaring multiple repositories

或者这是您特定的gradle版本中的错误-您的问题是来自'15; D

(至少在Gradle 3.5中定义类似

  

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

来源:gradle 3.5 Dependency Management for Java Projects

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

您可以尝试通过启用--refresh-dependencies和最佳情况-i日志运行gradle来忽略本地缓存,以查看请求到达何处以及结果如何。

看看How can I force gradle to redownload dependencies?


第二个选项as of gradle 5.1您可以随时声明过滤器

请参阅gradle 5.4.1 Declaring a repository filter

对我来说,我忽略了jcenter中的任何com.android软件包,这些软件包可以加快搜索速度并减少上述已知问题