我想拥有一个Gradle任务taskA
,以触发另一个任务taskB
的执行(如果两个都不都是最新的),但是如果仅taskB
不存在,则taskA
的执行不应触发taskB
的执行最新。如何才能做到这一点?
IOW,这里涉及任务依赖关系的两个部分,即任务层次结构和最新检查。我希望能够设置任务层次结构,但又不能暗示它是taskA
的最新检查。
上下文:如果taskA
的输入发生更改,或者taskB
在开发机(即非CI)上执行,则必须执行。如果不是最新的taskB
,则必须执行。这是因为taskB
的输出是由taskA
运行的可执行文件。如果仅更新可执行文件,就不应该运行taskA
的原因是,更新后的可执行文件可以产生与前一个可执行文件不同的输出。新的输出可能导致构建的其他部分出现问题。由于输出的目的是帮助确保用户遵循最佳实践,因此可以在CI构建中忽略更新的可执行文件的新输出。
更具体地说,taskA
调用protolock
输出的 taskB
二进制文件。 taskA
输出工程师应提交的proto.lock
文件。自动提交该文件可能会使工程师感到意外,并破坏这些检查的目的。
最佳答案
使用onlyIf
:
taskB.onlyIf {
trueIffNotCiOrInputsAreNewerThanOutput()
}
关于gradle - 如何让Gradle任务依赖于另一个任务,但如果另一个任务执行则不重新执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53234518/