当任务不产生任何输出时,如何正确地将 Gradle 任务标记为“最新”?如果上次运行成功并且输入自那时以来没有更改,则任务应保持“最新”。 Gradle 指南在部分之前指出15.9.2 http://gradle.org/docs/current/userguide/more_about_tasks.html#N10FD3, 下列:
"A task with no defined outputs will never be considered up-to-date."
在这种情况下如何将任务标记为最新?看来 Gradle 需要知道上次成功运行的时间,然后将其与输入的上次修改时间进行比较。作为解决方法,脚本可以创建/触摸一个空文件以将任务标记为完成?还有其他建议的解决方法吗?
只是想一下不同的场景......
没有任何输入或输出的任务。这些一直在运行。这可能只是包装现有的“做某事”可执行文件。
有输入的任务and输出。当输入或输出发生变化时它们就会运行。这可能是一个编译器。
仅具有输出的任务。这些仅在输出已更改/不存在时运行。这可能是下载一些东西的东西。 (我认为这些在现实中很少见,我会将下载的 URL 算作输入。)
有输入但无输出的任务。我在实践中没有遇到过这些。
正如您所说,您可以使用空的输出文件来欺骗最新检查。内置的 GradleTest http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html任务与您所描述的最相似,并且它有一个“报告”作为其输出。我想你可能也会有类似的东西。它可以像捕获任务的 stdout/stderr 并将其放入文件一样简单。当一切都过去时,这不太有用,但当事情失败时,它会很有用。
当然,任何这些都可以通过定制来补充upToDateWhen
一点代码。例如,您有一个启动网络服务器的任务,并且当网络服务器已经运行时它是“最新的”。我认为这与您在这里所描述的不太相符。
首先,我会尝试:
outputs.files file("${buildDir}/reports/${name}.out")
我认为无论是否在文件中实际放入某些内容,这都可以工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)