我想有一个Gradle任务taskA
来触发另一个任务taskB
的执行,如果这两个任务都不是最新的,而是执行{{1}如果只有taskB
不是最新的,则}不应触发taskA
的执行。该怎么办?
IOW,这里涉及任务依赖关系的两个部分,即任务层次结构和最新检查。我希望能够设置任务层次结构,但又不能暗示taskB
的最新检查。
上下文:taskA
必须在其输入发生更改或taskA
在开发机器(即不是CI)上执行时执行。如果taskB
不是最新的,则必须执行。这是因为taskB
的输出是由taskB
运行的可执行文件。如果仅更新可执行文件,不应运行taskA
的原因是,更新后的可执行文件可以产生与前一个可执行文件不同的输出。新的输出可能导致构建的其他部分出现问题。由于输出的目的是帮助确保用户遵循最佳实践,因此可以在CI构建中忽略更新的可执行文件的新输出。
更具体地说,taskA
调用taskA
输出的protolock
二进制文件。 taskB
输出工程师应提交的taskA
文件。自动提交该文件可能会使工程师感到意外,并破坏这些检查的目的。
答案 0 :(得分:0)
使用onlyIf
:
taskB.onlyIf {
trueIffNotCiOrInputsAreNewerThanOutput()
}