为什么Gradle需要正确配置的“存储库”关闭,即使是离线构建?

时间:2017-11-24 15:26:44

标签: firebase gradle android-gradle

我正在尝试在添加新依赖项(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在第二种情况下无法找到依赖项?

1 个答案:

答案 0 :(得分:0)

来自Gradle docs,似乎是有目的的

  

Gradle缓存不允许本地缓存隐藏问题并创建其他神秘且难以调试的行为,这些行为一直是许多构建工具的挑战。这种新行为以带宽和存储有效的方式实现。通过这样做,Gradle可以实现可靠且可重现的企业构建。

...

  

如果所需的工件在构建指定的任何存储库中不可用,则依赖性解析将失败,即使本地缓存具有从其他存储库检索的此工件的副本也是如此。

然而,为什么在--offline模式下也会发生这种情况有点令人费解。