【问题标题】:Delete directory with pattern in Gradle在 Gradle 中删除带有模式的目录
【发布时间】:2016-02-09 15:13:52
【问题描述】:

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

这可以通过删除所有文件来实现,但我希望目录树也消失:

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 风格是通过目录的存在动态添加的。

【问题讨论】:

    标签: android gradle groovy


    【解决方案1】:

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

    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'
    }
    

    【讨论】:

      【解决方案2】:

      你为什么不直接使用:

      task cleanAll(type: Delete, dependsOn: 'clean') {
        delete 'jniObjects', 'obj', 'gen'
      }
      

      ?

      【讨论】:

      • 那行不通。提到的文件夹位于文件树下方的某个位置,它们不是 Android src 目录中的直接子文件夹。
      猜你喜欢
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2021-04-16
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多