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()
}
答案 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软件包,这些软件包可以加快搜索速度并减少上述已知问题