通过gradle FileTree.include删除目录

通过gradle FileTree.include删除目录,gradle,Gradle,我想说: clean.delete(fileTree("a") { include "subdir/" include "aFile" }) 删除目录“subdir”和文件“aFile”。但不会删除“subdir”。我可以明确列出: clean.delete("a/subdir") 但这比我想要的更重复。是否可以让fileTree.include执行此任务 到目前为止,我提出了: [ "subdir", "aFile", ... ].each { it ->

我想说:

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") 
}

但这有点尴尬。

您可以这样指定:

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

不知道为什么文件树不工作。

恐怕这是不可能的。在gradle论坛上看到这个。讨论导致了这一点

一个简单的测试表明

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
    }
}
所以fileTree只用于目录树中的文件,而不用于目录。

这样如何

clean.delete(file('a').listFiles().findAll { it.getName() == 'subdir' || it.getName() == 'aFile' })
我只是碰巧弄明白了如何删除构建目录下的所有目录和文件,而不包括一个特定目录

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

谢谢,我希望避免在每个条目中重复父项(“a”)。我想这是可能的,但现在我已经知道怎么做了。也许这篇文章也会对你有所帮助:谢谢你给出了明确的答案,以及一个合理的建议(我在那里已经做得相当混乱)。很高兴知道我不是唯一一个面对这个问题的人。
clean.delete(file('build').listFiles().findAll { it.getName() != 'tools' })