通过gradle FileTree.include删除目录

时间:2014-06-17 23:39:32

标签: gradle

我想说:

clean.delete(fileTree("a") {
   include "subdir/"
   include "aFile"
})

删除目录“subdir”和文件“aFile”。但是“subdir”不会被删除。我可以明确地列出它:

clean.delete("a/subdir")

但这比我想要的更重复。 fileTree.include可以做这个工作吗?

到目前为止,我已提出:

[ "subdir",
  "aFile",
  ...
].each { it -> 
   clean.delete("a/$it") 
}

但这有点尴尬。

3 个答案:

答案 0 :(得分:7)

恐怕这是不可能的。在gradle论坛上查看此discussion。讨论导致了issue

一个简单的测试显示

task makeDir << {
    ['a', 'a/subdir'].each { new File(it).mkdirs() }
    new File('a/aFile').createNewFile()

    def tree = fileTree('a') {
        include 'subdir/'
        include 'aFile'
    }

    tree.each {File file ->
        println file
    }
}
当遍历目录时,

仅打印文件而不打印目录。你的解决方案很好,但你可以保存一些字符:

[ "subdir",
  "aFile",
  ...
].each { clean.delete("a/$it") }

因此fileTree仅适用于目录树中的文件,而不适用于目录。

答案 1 :(得分:2)

您可以这样指定:

clean {
   delete 'a/aFile', 'a/subdir'
}

不知道为什么fileTree无效。

答案 2 :(得分:0)

这样怎么样?

clean.delete(file('a').listFiles().findAll { it.getName() == 'subdir' || it.getName() == 'aFile' })

我刚刚弄清楚如何删除我的构建目录下的所有目录和文件,但不包含一个特定目录。

clean.delete(file('build').listFiles().findAll { it.getName() != 'tools' })