gpt4 book ai didi

android - 在 Gradle 中删除带有模式的目录

转载 作者:行者123 更新时间:2023-11-29 01:23:40 28 4
gpt4 key购买 nike

我一直在尝试创建一个干净的任务,它将删除我的文件树中的一些目录。我不想使用目录的确切路径,因为它可能因风格而异。

这通过删除所有文件来工作,但我希望目录树也消失了:

task cleanAll(type: Delete, dependsOn: 'clean') {

delete fileTree('src').matching { include '**/obj/**' }
delete fileTree('src').matching { include '**/jniLibs/**' }
delete fileTree('src').matching { include '**/gen/**' }
}

我也试过这个,但它真的不是一个Delete任务,只是删除了一些目录:

task cleanAll(type: Delete, dependsOn: 'clean') {
def deleteList = [ 'obj', 'jniLibs' ]
def dirsToDelete = []
def tree = fileTree('src').visit {
def File f = it.file
if ( f.isDirectory() && deleteList.contains(f.name)) {
dirsToDelete << f
}
}
dirsToDelete.each { dir -> dir.delete() }
}

我已经阅读了文档并进行了大量搜索,但我觉得我遗漏了一些简单的东西。

** 编辑 **

只是一个示例文件夹结构

app/src/main
app/src/flavor1/obj
app/src/flavor1/jniLibs

但是 flavor1 文件夹没有硬编码到 Gradle 脚本中。这些 Android 风格是根据目录的存在动态添加的。

最佳答案

这就是我最终所做的。简单地说,任何具有匹配名称的子目录都将被删除。

import groovy.io.FileType

class DeleteDir extends DefaultTask {
def baseDir = "."
def deleteMe(Object... targets) {
def directoryList = []
def baseDirectory = new File(baseDir).eachFileRecurse(FileType.DIRECTORIES) {
if ( targets.contains(it.name) ) {
directoryList << it
}
}
directoryList.each { dirObj ->
if ( dirObj.exists() ) {
println "Removing directory: $dirObj"
dirObj.deleteDir()
}
}
}
}

task hello( type: DeleteDir) {
baseDir = '.'
deleteMe 'obj', 'gen', 'jniLibs'
}

关于android - 在 Gradle 中删除带有模式的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com