Gradle - 删除具有特定扩展名的文件

时间:2014-12-04 03:41:54

标签: gradle

我正在使用Gradle,并希望删除具有特定扩展名的所有文件。那是Gradle能做的吗?

4 个答案:

答案 0 :(得分:49)

使用Gradle Delete任务。

task deleteFiles(type: Delete) {
    delete fileTree('dir/foo') {
        include '**/*.ext'
    }
}

答案 1 :(得分:4)

您可以自定义默认clean任务,以包含其他目录和文件以供删除,如:

clean{
  delete 'buildDir', 'generated'
}

如果你想使用glob,你可以使用fileTree或任何其他方便的方法来列出文件:

clean{
  delete 'build', 'target', fileTree(dockerBuildDir) { include '**/*.rpm' }
}

答案 2 :(得分:2)

有几种方法可以删除具有特定扩展名的文件。通常,您必须选择一些文件;然后过滤其中一些文件,最后删除提醒文件。例如,试试这个:

def tree = fileTree('${SOME_DIR}') 
tree.include '**/*.${SOME_EXT}'
tree.each { it.delete() }

答案 3 :(得分:0)

clean {
  delete xxxx
}

以上清洁不是很正确。因为它实际上是通过任务名称调用名为clean的方法。这种方法通常用于配置任务,它发生在配置时间而不是任务执行时间。

如果需要修改默认清除,以下是更合理的方法。这是我的示例,删除除一个排除文件以外的所有文件。清除任务中的删除操作实际上确实在任务执行时间发生。

    clean {

    Task self = delegate
    self.deleteAllActions()
    self << {

        project.delete(fileTree(dir: buildDir).exclude("**/tmp/expandedArchives/org.jacoco.agent*/**"))

        def emptyDirs = []

        project.fileTree(dir: buildDir).visit {
            File f = it.file

            if (f.isDirectory() ) {
                def children = project.fileTree(f).filter { it.isFile() }.files
                if (children.size() == 0) {
                    emptyDirs << f
                }
            }
        }

        // reverse so that we do the deepest folders first
        emptyDirs.reverseEach {
            println "delete file: " + it + ", " + project.delete(it) //it.delete()
        }
    }
}