当任务没有产生任何输出时,如何正确地将Gradle任务标记为"最新"?如果上次运行成功并且输入自那时起没有改变,则任务应保持"最新".Gradle指南在第15.9.2节之前说明,如下:
"A task with no defined outputs will never be considered up-to-date."
在这种情况下,如何将任务标记为最新?似乎Gradle需要知道上次成功运行的时间,然后将其与输入的最后修改时间进行比较.作为一种解决方法,脚本可以创建/触摸空文件以将任务标记为完成?还有其他建议的解决方法吗?
big*_*guy 15
只考虑不同的场景......
没有任何输入或输出的任务.这些一直在运行.这可能只是包装现有的"do something"可执行文件.
具有输入和输出的任务.当输入或输出发生变化时,它们会运行.这可能是一个编译器.
只有输出的任务.这些仅在输出已更改/不存在时运行.这可能是下载内容的东西.(我认为这些在现实中非常罕见,我会将下载的URL作为输入.)
输入没有输出的任务.我没有在实践中碰到这些.
就像你说过的那样,你可以用一个空的输出文件来欺骗最新的检查.内置的Gradle Test任务与您描述的任务最相似,并且它有一个"报告"作为其输出.我想你可能也会有类似的东西.它可以像捕获任务的stdout/stderr并将其放入文件一样简单.这对于一切都过去都没有用,但是当事情失败时它会很有用.
当然,任何这些都可以用自定义upToDateWhen的代码补充.例如,你有一个启动网络服务器的任务,当网络服务器已经运行时,它是"最新的".我不认为这与你在这里描述的内容非常吻合.
首先,我会尝试:
outputs.files file("${buildDir}/reports/${name}.out")
我认为无论是否在文件中实际放置内容都可以.
小智 5
您可以重写任务upToDateWhen方法。
task createDist(type: Zip) {
  outputs.upToDateWhen {
    return true
  }
}
所以 true 总是最新的, false 总是过时的。您可以定义任何类型的自定义逻辑来确定它是否是最新的。
| 归档时间: | 
 | 
| 查看次数: | 5639 次 | 
| 最近记录: |