gradle - Gradle 会自动推断任务之间的依赖关系吗?如果是的话,什么时候?

标签 gradle kotlin gradle-kotlin-dsl build-definition tooling

在我的构建脚本中,当我配置 downloadAndUnzipFile 任务时,我显式查询 downloadZipFile 任务的输出。我预计这足以让 Gradle 推断任务之间的依赖关系,但显然不是,因为我在调用 downloadAndUnzipFile` 时收到错误。

Execution failed for task ':downloadAndUnzipFile'.
> Cannot expand ZIP '/home/jdanek/repos/testing/gradle-infer-deps/build/1.0.zip' as it does not exist.

我的构建脚本build.gradle.kts

import de.undercouch.gradle.tasks.download.Download

group = "org.example"
version = "1.0-SNAPSHOT"

plugins {
    id("de.undercouch.download").version("4.0.4")
}

tasks {
    val downloadZipFile by registering(Download::class) {
        src("https://github.com/michel-kraemer/gradle-download-task/archive/1.0.zip")
        dest(File(buildDir, "1.0.zip"))
    }

    val downloadAndUnzipFile by registering(Copy::class) {
        from(zipTree(downloadZipFile.get().outputFiles.first()))
        into(buildDir)
    }
}

我也尝试过

from(zipTree(downloadZipFile.get().outputFiles.first()))

并且这也没有定义依赖关系。

我的 Gradle 是最新的 6.2.2。

最佳答案

为了让 Gradle 发现任务依赖关系,它们必须为其输入和输出使用特定类型,以便 Gradle 可以为您跟踪依赖关系。请参阅this documentation page就主题而言。

在您的用例中,de.undercouch.download插件似乎公开了一个简单的 List<File>这不是一个丰富的类型,因此 Gradle 无法找出链接。在这种情况下,您必须使用 dependsOn(downloadZipFile) 明确任务依赖性。

关于gradle - Gradle 会自动推断任务之间的依赖关系吗?如果是的话,什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60687696/

相关文章:

android - 在UdemyStudio中运行项目时出错-提及错误的JVM

maven - gradle始终使用{user.home}/repository作为Maven本地缓存

android - 枚举中的变量初始化,或在编译时防止枚举丢失案例

Kotlin Smartcast 不适用于内联声明

java - 安卓工作室 : Change EditText filed from a java class

gradle - 使用Kotlin DSL在Gradle中解压缩文件

java - 为什么 Gradle 编译 Java 项目失败?

json - 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL

javascript - Kotlin JS 项目的基本 Gradle 脚本 Kotlin 文件是什么样的?