Gradle 如何仅在任务不是最新的情况下执行任务依赖关系?

Gradle 如何仅在任务不是最新的情况下执行任务依赖关系?,gradle,build.gradle,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 c

我有两个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
的中间数据的生产者。当没有以前的输出时,在
taskB
之前执行
taskA
是至关重要的


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

我最终通过创建一个按顺序调用
taskA
taskB
的外部脚本来解决这个问题,然后创建一个与
taskB
具有相同输入的
taskC
,并调用脚本

这实际上是将两个任务合并为一个任务,当最终输出是最新的时,将跳过这两个任务。这是可行的,但我希望有一个更干净的方法来处理gradle