Gradle 输入和输出
Gradle inputs and outputs
我正在学习 Gradle 并试图了解输入和输出文件如何确定任务是否是最新的。
此任务永远不会是最新的,即使构建文件没有更改。
task printFoo() {
inputs.file(getBuildFile())
doLast {
println 'foo'
}
}
此任务始终是最新的,即使构建文件发生变化。
task printFoo() {
outputs.file(getBuildFile())
doLast {
println 'foo'
}
}
我原以为这两个示例仅在构建文件更改时才认为任务已过时,否则就是最新的。我错过了什么?
Gradle 需要输入和输出的时间戳才能确定任务结果是否过时。
在第一种情况下,您没有任何输出时间戳,因为您没有任何输出。 Gradle 无法确定您的输出是否是最新的,因为它不知道它们。所以它认为你的输出总是过时的。来自文档:"A task with no defined outputs will never be considered up-to-date." (https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks)
在第二种情况下,Gradle 应该会如您所愿:当构建文件更改时,认为任务输出已过时。来自文档:"A task with only outputs defined will be considered up-to-date if those outputs are unchanged since the previous build."。这可能是一个错误,但我认为这是因为您使用构建文件作为输出。你试过用另一个文件吗?
我正在学习 Gradle 并试图了解输入和输出文件如何确定任务是否是最新的。
此任务永远不会是最新的,即使构建文件没有更改。
task printFoo() {
inputs.file(getBuildFile())
doLast {
println 'foo'
}
}
此任务始终是最新的,即使构建文件发生变化。
task printFoo() {
outputs.file(getBuildFile())
doLast {
println 'foo'
}
}
我原以为这两个示例仅在构建文件更改时才认为任务已过时,否则就是最新的。我错过了什么?
Gradle 需要输入和输出的时间戳才能确定任务结果是否过时。
在第一种情况下,您没有任何输出时间戳,因为您没有任何输出。 Gradle 无法确定您的输出是否是最新的,因为它不知道它们。所以它认为你的输出总是过时的。来自文档:"A task with no defined outputs will never be considered up-to-date." (https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks)
在第二种情况下,Gradle 应该会如您所愿:当构建文件更改时,认为任务输出已过时。来自文档:"A task with only outputs defined will be considered up-to-date if those outputs are unchanged since the previous build."。这可能是一个错误,但我认为这是因为您使用构建文件作为输出。你试过用另一个文件吗?