我有一些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
缓存会花费一些时间,这又是浪费的。>
答案 0 :(得分:0)
我最终通过创建一个外部脚本来依次解决此问题,该脚本依次调用taskA
和taskB
,然后创建一个与taskC
输入相同的taskB
并调用脚本。
这实际上将两个任务合并为一个,并且在最终输出为最新时将跳过这两个任务。它可以工作,但是我希望可以使用gradle来实现此目的的更清洁方法。