仅当任务不是最新时才如何执行任务依赖关系?

时间:2019-09-19 08:20:10

标签: gradle build.gradle

我有一些gradle任务,看起来像这样:


task taskA(){
  inputs.file('config')
  outputs.file('a-out')
}

task taskB(dependsOn: taskA){
  /*
   * Strictly speaking, 'a-out' is also a input of taskB, but
   * if there is already output for taskB and 'config' has not changed,
   * there is no need to regenerate 'a-out'.
   */
  inputs.file('config')
  outputs.file('b-out')
}

taskB是我感兴趣的实际任务,taskA仅充当taskB的中间数据的生成者。如果没有先前的输出,则在{em> taskA之前先执行taskB

如果taskA是最新的(或从构建缓存加载),我希望能够完全跳过taskB,因为在这种情况下,中间数据的生成只是浪费时间。上面的设置将为这两个任务输出UP-TO-DATE,但这不是我想要的,因为使用构建缓存时,解压缩taskA缓存会花费一些时间,这又是浪费的。

1 个答案:

答案 0 :(得分:0)

我最终通过创建一个外部脚本来依次解决此问题,该脚本依次调用taskAtaskB,然后创建一个与taskC输入相同的taskB并调用脚本。

这实际上将两个任务合并为一个,并且在最终输出为最新时将跳过这两个任务。它可以工作,但是我希望可以使用gradle来实现此目的的更清洁方法。