如何从gradle任务输出中删除元素?

时间:2015-12-16 14:20:11

标签: gradle

是否可以从任务的输出文件中排除一个元素,以便不考虑它进行最新的检查?在我的情况下,我有一个复制任务,自动在输出变量中设置目标目录,但我想删除它并只设置一些复制的文件。

或者,作为替代方案,是否可以覆盖整个输出变量?

谢谢, 米歇尔。

2 个答案:

答案 0 :(得分:2)

增量任务从任务的输入和输出文件创建快照。如果两个任务执行的这些快照相同(基于文件内容的哈希代码),则Gradle假定该任务是最新的。

您无法从输出中删除某些文件,并且希望Gradle忘记它们,只是因为哈希码会有所不同。

有一个选项允许您手动定义最新检查的逻辑。

您应该在TaskOutputs类中使用方法upToDateWhen(Closure upToDateClosure)

task myTask {
   outputs.dir files('/home/user/test')
   outputs.upToDateWhen {
      // your logic here
      return true; // always up-to-date
   }
}

答案 1 :(得分:0)

我找到了解决方案:

task reduceZip(type: Copy) {

   outputs.files.setFrom(file("C:/temp/unzip/test.properties"))
   outputs.file(file("C:/temp/unzip/test.txt"))

   from zipTree("C:/temp/temp.zip")
   into "C:/temp/unzip"
}

可以修改Outputs.files列表只注册新元素,而不是删除(据我所知)。所以我需要重置列表,然后最终添加其他文件。 outputs.files.setFrom方法重置outputs.files列表,因此可以添加其他文件。在上面的示例中,我将最新的检查仅减少到test.properties和test.txt文件。