【问题标题】:Why is gradle talking to remote repos every time?为什么 gradle 每次都与远程仓库交谈?
【发布时间】:2016-06-15 17:43:33
【问题描述】:

我有一个包含很多依赖项的 gradle 项目,运行一个简单的任务(简单地打印出类路径)大约需要 12 秒,即使所有依赖项都已下载并在缓存中可用。

如果我关闭网络接口并运行相同的任务,它会在大约一秒钟内完成。

那么,问题是为什么 gradle 每次都与互联网交谈?是否可以设置一些标志以使其更积极地使用缓存?我尝试用谷歌搜索它,并且有很多关于如何强制 gradle 不使用缓存的讨论,但我找不到相反的任何东西。

针对cmets中的问题,我的repositories配置如下:

repositories {
  maven { url "${artifactoryUrl}/jcenter" }
  maven { url "${artifactoryUrl}/libs-release-local" }
  maven { url "${artifactoryUrl}/libs-snapshot-local" }
  mavenCentral()
  maven { url "http://maven.twttr.com" }
}

$artifactoryUrl 指向我们在内部运行的工件实例)。

【问题讨论】:

  • 您的repositories { } 配置是什么样的?
  • @VivinPaliath 我将配置添加到问题中。

标签: java gradle dependencies


【解决方案1】:

我知道,如果你有一个依赖项,你说你总是想要最新版本,那么 gradle 将不得不检查所有存储库,直到找到一个。

如果您不希望 gradle 检查远程存储库而只使用其缓存,则可以使用 --offline 标志 (see here)。

【讨论】:

  • 是的,我找到了--offline 标志,但问题是我在输入命令时总是忘记使用它:) 你怎么“说你总是想要最新版本” ?我什至不知道这是可能的。也许,我是偶然的,这就是我的问题?
  • 要获得最新版本,您只需在版本号 (see here) 中使用 +。不幸的是,据我所知,如果不使用 --offline 标志,就无法告诉 gradle 使用其缓存。
  • 嗯,我的版本号肯定没有任何优点... :-/
  • 默认情况下,gradle 会验证您在 gradle 缓存中的依赖项是否与远程存储库中可用的依赖项相同。它通过检查 SHA 校验和来做到这一点,并为此联系远程仓库。正如答案所说,添加 --offline 告诉 gradle 不要检查远程仓库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2012-06-26
  • 1970-01-01
  • 2014-12-11
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多