Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?_Gradle_Ant - Fatal编程技术网

如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?

如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?,gradle,ant,Gradle,Ant,我想创建一个任务,将压缩目录中的所有文件,忽略所有子目录。同时,我希望遍历所有子目录并创建包含这些目录中的文件的ZIP(并忽略任何其他子目录) 因此,对于此目录结构,我需要以下提示: $ls build/dirA fileA dirB $ls build/dirA/dirB fileB I should get zip/zipA containing fileA, zip/zipB containing fileB. 我使用的代码基于这里的答案:本质上,我为要创建的每个zip工件创建一个z

我想创建一个任务,将压缩目录中的所有文件,忽略所有子目录。同时,我希望遍历所有子目录并创建包含这些目录中的文件的ZIP(并忽略任何其他子目录)

因此,对于此目录结构,我需要以下提示:

$ls build/dirA
fileA
dirB

$ls build/dirA/dirB
fileB

I should get zip/zipA containing fileA, zip/zipB containing fileB.
我使用的代码基于这里的答案:本质上,我为要创建的每个zip工件创建一个zip任务,并且依赖于顶级任务

task myZip() {
    file('build').eachDir { dir ->
        dir.eachDir { sub ->
            dependsOn tasks.create("zip$sub.name", Zip) {
                from sub
                baseName sub.name
                destinationDir file('zip')
            }
        }

        dependsOn tasks.create("zip$dir.name", Zip) {
            from dir
            baseName dir.name
            excludes ['*/**']
            destinationDir file('zip')
        }
    }
}
问题似乎在排除模式中。我得到了子目录的正确拉链,但是父目录包括
fileA
dirB/fileB

请问正确的方法是什么


*注意,我没有在子目录中为迭代设置排除,因为我认为该模式需要与父目录相同,我还没有弄清楚。您可以尝试下面的脚本,它将解决您的问题:

import static groovy.io.FileType.DIRECTORIES
task myZip {
    file('folder').traverse(type: DIRECTORIES) {
        def path = it.path
        def zipFile = it.name + '.zip'
        ant.zip(destfile: zipFile){
          fileset(dir: path) {
            include (name: "*")
            type (type: "file")
          }
        }
    }

    doLast {
      copy {
        from "."
        include "*.zip"
        into file("zip")
      }
    }
}
下面是一些示例测试:

$ tree folder
folder
└── dirA
    ├── dirB
    │   ├── dirC
    │   │   ├── dirD
    │   │   └── fileC
    │   └── fileB
    └── fileA

4 directories, 3 files
它将三个zip文件生成到zip文件夹以及根文件夹中

$ ls -1 zip/
dirA.zip
dirB.zip
dirC.zip