我正在学习Gradle。我有一个任务,我使用了upToDateWhen方法。它被硬编码为总是返回true。我听说,如果这是真的,该方法被认为是最新的,它不会运行。但是当我执行任务时,它第一次运行,然后从第二次开始停止运行,说它是最新的。我以为它连第一次都跑不了。我错过了什么。请给我点光。
task inputOutputCheckWithMethodCall(group:'Learn-Task-Execution',description:'This task is used to learn how gradle executes tasks by evaluating input and output through method call during execution time'){
outputs.upToDateWhen {true}
doFirst{
println 'Executing task inputOutputCheckWithMethodCall'
}
}
1条答案
按热度按时间qmelpv7a1#
输出是否为最新只是计算任务是否为最新的一部分。参见https://github.com/gradle/gradle/issues/2467#issuecomment-315184626
outputs.upToDateWhen { true }
并不意味着“任务是最新的”,它只是意味着输出是针对特定规范的最新的。Gradle仍然会进行自己的最新检查。另一件可能令人困惑的事情是任务的操作是在哪里定义的。如果操作是在构建脚本中定义的,则构建脚本本身就是任务的输入。因此,对构建脚本的更改将使任务过期。
如果我有一个任务,比如:
每当我运行此命令时,myTask都过时了。如果我将false切换为true,第一次运行它时,任务仍然是过时的(因为buildscript更改了)。当我再次运行它时,它将是最新的(所有输入都是相同的)。你会在信息级日志中看到这个。