【问题标题】:Configure a Gradle Task at Runtime在运行时配置 Gradle 任务
【发布时间】:2020-05-09 13:35:25
【问题描述】:

是否可以在其他任务运行后在运行时配置 gradle 任务的输入?

例如,我在一个步骤中计算一个 zip 的 SHA,然后上传包含上一步中 SHA 的路径的 zip。但是,当我通过 def sha = shaFile.text 获取文件中包含的 SHA 的值时,我得到一个错误:(No such file or directory)

我一直认为任务是在运行时运行的闭包,但我猜这只是 doFirstdoLast,但输入需要在此之前进行配置。

【问题讨论】:

    标签: gradle


    【解决方案1】:

    是否可以在其他任务运行后在运行时配置 gradle 任务的输入?

    这样想:

    任务B要运行,任务A必须先运行,也就是说任务B对任务A有依赖。

    有关任务依赖关系的更多详细信息,请参阅Adding dependencies to a task

    好的,现在我们需要任务 A 的 输出(SHA 值)作为任务 B 的 输入。因为我们有一个依赖项在任务 A 上,Gradle 很好地确保任务 A 在 B 执行之前执行。

    这是Kotlin DSL 中的快速脏示例(应该很容易翻译成 Groovy):

    tasks {
        val taskA = register("taskA") {
            val shaText = File("sha.txt")
            if (shaText.exists()) {
                shaText.delete()
            }
            File("sha.txt").writeText("abc");
        }
        register("taskB") {
            dependsOn(taskA)
            println(File("sha.txt").readText())
        }
    }
    

    理想情况下,您应该创建一个 custom task type 指定 input file 并指定 output file 以便 Gradle 可以缓存任务输入/输出。详情请参考Incremental tasks

    【讨论】:

    • 感谢您的回答,实际上我确实只是最终编写了一个自定义任务。这似乎是最简单的事情,并且保持build.gradle 干净。
    猜你喜欢
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多