如果特定输入不是最新的,如何询问Gradle

时间:2018-05-26 21:54:32

标签: gradle

Gradle有办法做这样的事吗?

task printIsSpecificInputUpToDate() {

    inputs.property("file1", file("file1.log"))
    inputs.property("file2", findProperty("file2.log"))
    outputs.file(file("file3.log"))

    // if one or more inputs is not up to date
    doLast {
        // find out if file1 is actually the input out of date
        // NOTE: pseudo-code!
        if (inputs.get("file1").isUpToDate()) {
            onlyProcessFile2()
        } else {
            processFile1AndFile2()
        }
    }
}

如果没有,这是否表明Gradle认为这将是一个糟糕的模式?

1 个答案:

答案 0 :(得分:2)

我认为你要找的是Incremental tasks。 您需要为此定义自己的任务类,但是您可以准确地查询输入中已更改的文件:

@TaskAction
void execute(IncrementalTaskInputs inputs) {
    println inputs.incremental ? 'CHANGED inputs considered out of date'
                               : 'ALL inputs considered out of date'
    if (!inputs.incremental)
        project.delete(outputDir.listFiles())

    inputs.outOfDate { change ->
        println "out of date: ${change.file.name}"
        def targetFile = new File(outputDir, change.file.name)
        targetFile.text = change.file.text.reverse()
    }

    inputs.removed { change ->
        println "removed: ${change.file.name}"
        def targetFile = new File(outputDir, change.file.name)
        targetFile.delete()
    }
}