【问题标题】:Cannot determine why Gradle downloads compileClasspath dependencies at configuration phase无法确定 Gradle 为什么在配置阶段下载 compileClasspath 依赖项
【发布时间】:2021-10-12 11:08:22
【问题描述】:

通过阅读how to improve Gradle build performance,我了解到不应该在配置阶段下载依赖项。

我使用远程构建缓存,总是在空的 Docker 容器中从头开始运行构建。

我的构建总是下载 :compileClasspath 的所有依赖项,即使 :compileJava 任务是从构建缓存中获取的。

我的印象是,如果 :compileJava 已经在缓存中并且不需要执行它,Gradle 不会下载依赖项。

这里是示例build.gradle

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    def springBootVersion = '2.4.2'

    implementation "org.springframework.boot:spring-boot-starter:$springBootVersion"
}

【问题讨论】:

    标签: gradle build.gradle


    【解决方案1】:

    免责声明:到目前为止,我从未使用过 Gradle 的构建缓存功能。此答案仅基于文档和经验,因此请对我的回答持保留态度。

    Gradle 会跟踪任务的输入和输出,以避免在没有任何更改的情况下再次执行它们。 Gradle 的 UP-TO-DATE 输出表明了这一点。其中,compileJava 任务的输入是项目的源文件及其依赖项。任务输出缓存如下:

    由于任务描述了它的所有输入和输出,Gradle 可以计算一个构建缓存键,该键根据其输入唯一定义任务的输出。 (Cacheable Tasks)

    (重点是我的)

    这意味着:构建缓存键由任务的输入组成,并且由于依赖项、它们的源和哈希是 compileJava 输入的一部分,因此必须首先解析它们。

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2013-01-24
      • 2023-03-07
      • 2015-09-02
      • 2020-03-28
      相关资源
      最近更新 更多