构建.无法确定为什么Gradle在配置阶段下载compileClasspath依赖项



从如何提高Gradle构建性能的阅读中,我了解到不应该在配置阶段下载依赖项。

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

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

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

这是样本build.gradle

plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
def springBootVersion = '2.4.2'
implementation "org.springframework.boot:spring-boot-starter:$springBootVersion"
}

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

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

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

(重点是我的)

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

最新更新