当我同步我的Android项目时,我不断看到以下消息:
Gradle: Download https://s3.amazonaws.com/moat-sdk-builds/com/google/android/gms/play-services-ads-base/maven-metadata.xml
Gradle: Download https://s3.amazonaws.com/moat-sdk-builds/com/google/android/gms/play-services-measurement-base/maven-metadata.xml
Gradle: Download https://s3.amazonaws.com/moat-sdk-builds/com/google/firebase/firebase-iid/maven-metadata.xml
这些库应该在google()
存储库中找到,这是我设置中的第一个库:
allprojects {
repositories {
google()
jcenter()
// ...
maven { url "https://s3.amazonaws.com/moat-sdk-builds" }
}
}
但是,它调查了maven { url "https://s3.amazonaws.com/moat-sdk-builds" }
并浪费了很多时间。这里发生了什么?有什么办法可以调试吗?谢谢。
答案 0 :(得分:0)
您可以尝试customize dependency resolution behaviour或declare repository filters。
声明存储库过滤器很简单:
allprojects {
repositories {
google()
jcenter()
// ...
maven {
url "https://s3.amazonaws.com/moat-sdk-builds"
content {
// Does only include this group
includeGroup "moat.sdk"
}
}
}
}
还可以选择exclude
进行分组并增强构建性能。
请注意,“将存储库匹配到依赖项是一个令人振奋的功能”。 API documentation提供有关过滤器选项的更多信息。
您可以在下面找到有关特定行为的更多信息。关于依赖关系解析,Gradle会按顺序检查存储库。
依赖项解析如何工作
[...]
- 考虑到必需的依赖关系,Gradle尝试通过搜索依赖关系指向的模块来解决依赖关系。每个存储库已按顺序检查。根据存储库的类型,Gradle会查找描述模块的元数据文件(.module,.pom或ivy.xml文件),或者直接查找工件文件。
[...]
但是据我了解,不管它是否已经找到“正确的”工件,都可以“访问”每个存储库。
- 检查完每个存储库中的模块后,Gradle会选择要使用的“最佳”模块。使用以下条件完成此操作:
- 对于动态版本,优先使用“较高”的具体版本而不是“较低”的版本。
- 由模块元数据文件(.module,.pom或ivy.xml文件)声明的模块优于仅具有工件文件的模块。
- 早期版本库中的模块优先于早期版本库中的模块。
- 当依赖关系由具体版本声明并且在存储库中找到模块元数据文件时,无需继续搜索以后的存储库,并且过程的其余部分会被短路。
[...]
Introduction to Dependency Management - How dependency resolution works