Gradle离线如何缓存依赖项

Posted

技术标签:

【中文标题】Gradle离线如何缓存依赖项【英文标题】:Gradle offline how to cache the dependencies 【发布时间】:2016-10-10 13:35:43 【问题描述】:

我在服务器上进行夜间 gradle 构建,我从 git 签出存储库并构建它们。但是,有一个代理,gradle 无法下载任何存储库。我尝试运行 gradlew 离线模式,然后我收到一条错误消息告诉我

“没有缓存版本”,然后是依赖项的名称。

这显然是因为我从未下载过依赖项,我正在考虑手动下载依赖项缓存它们并在构建可以访问它的服务器上使用该 gradle 缓存。我的问题如下:

    有什么方法可以手动下载 .jar 文件或 .pom 文件,然后缓存它们?_ 如何在 $Home/.gradle/caches 目录中缓存 jar 文件?我试着把它放在那里,但它不起作用。

有什么想法吗?

【问题讨论】:

你不能用互联网运行构建吗?只要您不更改依赖项,您就应该能够从那时起离线构建。但这当然远非最佳解决方案。 你不能只在你的 gradle.properties 文件中配置代理吗?这将永久解决问题。无需离线模式。 我工作的公司不允许我配置代理....它需要离线构建 但是他们认为这应该如何工作?无论您是手动将所有依赖项放在本地 maven 存储库中,还是 Gradle 自动下载它们,这些依赖项仍然来自完全相同的位置——来自 jcenter 或 mavenCentral。这样做没有任何好处,只会增加更多不必要的工作。 但是我能想到的一种解决方案是让您的公司托管一个私有 maven 服务器 - 例如 Nexus 或 Artifactory - 然后从那里提取所有必需的依赖项。在这种情况下,您的公司将完全控制用于您的构建的依赖项,同时您和其他开发人员不必做任何复杂的配置来配置它。您只需在 build.gradle 文件中设置您的 maven 服务器,而不是 jcenter 或 mavenCentral。 【参考方案1】:

通常,Gradle 仅在需要时才按需检索依赖项。要让 Gradle 预先下载所有依赖项(从而填充本地缓存),您可以使用类似

的任务
task resolveAllDependencies 
    description "Resolves all transitive dependencies (e.g. to build offline later)."

    doLast 
        configurations.all 
            it.resolve()
        
    

运行此任务后,您应该可以使用--offline 成功构建。

【讨论】:

有什么方法可以在不同的计算机上使用相同的缓存吗?如果我复制缓存,使用 --offline 的构建是否仍然有效? 仅当缓存目录的绝对路径在所有机器上都相同时。这目前是 Gradle 中的一个限制,请参阅 this issue。 好的 sschuberth 非常感谢您的建议,我会努力解决问题的。 在 Gradle 6.1 中修复:github.com/gradle/gradle/issues/1338#issuecomment-565691159【参考方案2】:

android Studio 中同步依赖项,然后转到

文件 > 设置 > 构建和执行 > Gradle > 启用离线模式 > 好的!

【讨论】:

这些说明适用于什么 IDE? Android Studio.

以上是关于Gradle离线如何缓存依赖项的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种简单的方法可以从本地 gradle 缓存中删除一个依赖项?

android studio 离线配置 gradle和依赖

Gradle 中获取 gradle 依赖项缓存中 jar 文件路径的最简洁方法

Gradle 将依赖项下载到缓存而不是 Maven 存储库

Gradle GUI 仅显示依赖项

Gitlab CI gradle依赖缓存