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

ma8fv8wu  于 2023-03-08  发布在  其他
关注(0)|答案(5)|浏览(318)

我正在使用Gradle,希望删除具有特定扩展名的所有文件。Gradle可以执行此操作吗?

iswrvxsc

iswrvxsc1#

使用Gradle Delete任务。

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

ovfsdjhp2#

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

clean{
  delete 'buildDir', 'generated'
}

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

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

e37o9pze3#

删除具有一定扩展名的文件有几种方法,一般情况下,必须选择一些文件;然后过滤其中的一些,最后删除提醒文件。例如,试试这个:

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

ttp71kqs4#

clean {
  delete xxxx
}

上面的clean不太正确,因为它实际上是通过任务名调用了一个名为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()
        }
    }
}
5vf7fwbs

5vf7fwbs5#

唯一对我有效的是:

// Include only files that have the '.ext' extension
project.delete(fileTree(dir: './path/to/directory', include: "**.ext"))

我可以在Gradle文件的顶层调用它,而不必使用任何形式的clean任务。
您甚至可以使用../sibling-directory-name从当前的基层目录上移到相邻的目录。

相关问题