我正在尝试在添加新依赖项(Firebase)后使用慢速Gradle安装来调试问题。
我在allprojects.repositories
闭包中有几个条目,如下所示:
allprojects {
repositories {
jcenter {
url 'https://internal.example.com/mvn-public/'
}
maven {
url 'https://maven.google.com'
}
maven {
url "https://oss.sonatype.org/content/repositories/snapshots"
}
maven {
url "https://jitpack.io"
}
}
}
我以为我会删除除Firebase所需的所有内容之外的所有内容,并检查是否加快了安装速度,但由于以下问题,这不起作用:
当我在添加新依赖项之前返回master
并进行离线构建时,它工作正常(因为我已经将所有内容都放在磁盘上) - 好:
gradlew build --offline
但是现在,我从allprojects.repositories
关闭中删除所有条目并再次运行相同的命令:
gradlew build --offline
并且令人惊讶的是,我收到一个错误,告诉我它无法解决依赖关系。这对我来说很令人惊讶,因为我刚刚在一分钟之前使用--offline
标志构建,它应该在磁盘上,并且我没有任何需要网络查找更新的通配符依赖项 - 所有版本都是硬编码的(即1.4.1
,而非1.4.*
)。
* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.
> Could not find com.squareup.leakcanary:leakcanary-android:1.5.4.
Required by:
project :app
> Could not find com.google.dagger:dagger:2.12.
Required by:
project :app
> Could not find io.requery:requery:1.4.1.
Required by:
project :app
> Could not find io.requery:requery-android:1.4.1.
Required by:
project :app
...
为什么Gradle在第二种情况下无法找到依赖项?
答案 0 :(得分:0)
来自Gradle docs,似乎是有目的的
Gradle缓存不允许本地缓存隐藏问题并创建其他神秘且难以调试的行为,这些行为一直是许多构建工具的挑战。这种新行为以带宽和存储有效的方式实现。通过这样做,Gradle可以实现可靠且可重现的企业构建。
...
如果所需的工件在构建指定的任何存储库中不可用,则依赖性解析将失败,即使本地缓存具有从其他存储库检索的此工件的副本也是如此。
然而,为什么在--offline
模式下也会发生这种情况有点令人费解。