如何让Gradle任务依赖于另一个任务,但如果另一个任务执行则不重新执行?

时间:2018-11-09 23:25:26

标签: gradle

我想有一个Gradle任务taskA来触发另一个任务taskB的执行,如果这两个任务都不是最新的,而是执行{{1}如果只有taskB不是最新的,则}不应触发taskA的执行。该怎么办?

IOW,这里涉及任务依赖关系的两个部分,即任务层次结构和最新检查。我希望能够设置任务层次结构,但又不能暗示taskB的最新检查。

上下文:taskA必须在其输入发生更改或taskA在开发机器(即不是CI)上执行时执行。如果taskB不是最新的,则必须执行。这是因为taskB的输出是由taskB运行的可执行文件。如果仅更新可执行文件,不应运行taskA的原因是,更新后的可执行文件可以产生与前一个可执行文件不同的输出。新的输出可能导致构建的其他部分出现问题。由于输出的目的是帮助确保用户遵循最佳实践,因此可以在CI构建中忽略更新的可执行文件的新输出。

更具体地说,taskA调用taskA输出的protolock二进制文件。 taskB输出工程师应提交的taskA文件。自动提交该文件可能会使工程师感到意外,并破坏这些检查的目的。

1 个答案:

答案 0 :(得分:0)

使用onlyIf

taskB.onlyIf {
  trueIffNotCiOrInputsAreNewerThanOutput()
}