Gradle输入和输出

时间:2015-06-09 15:43:24

标签: gradle incremental-build

我正在学习Gradle并尝试了解输入和输出文件如何确定任务是否是最新的。

即使构建文件没有变化,此任务也永远不会是最新的。

    task printFoo() {
        inputs.file(getBuildFile())

        doLast {
            println 'foo'
        }
    }

即使构建文件发生更改,此任务也始终是最新的。

    task printFoo() {
        outputs.file(getBuildFile())

        doLast {
            println 'foo'
        }
    }

我原本希望这两个例子只在构建文件发生变化时将任务视为过时,否则就是最新的。我错过了什么?

1 个答案:

答案 0 :(得分:6)

Gradle需要输入和输出的时间戳才能确定任务结果是否已过期。

在第一种情况下,您没有任何输出时间戳,因为您没有任何输出。 Gradle无法确定您的输出是否是最新的,因为它不知道它们。所以它认为你的输出总是过时的。从文档:"没有定义输出的任务永远不会被认为是最新的。" (https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks

在第二种情况下,Gradle应该按预期执行:在构建文件更改时考虑任务输出过期。从文档:"如果那些输出自上一次构建以来没有改变,那么只定义了输出的任务将被认为是最新的。"。这可能是一个错误,但我认为这是由于您使用构建文件作为输出。你有没有尝试过另一个文件?