gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:10:40 25 4
gpt4 key购买 nike

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

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

$ls build/dirA
fileA
dirB

$ls build/dirA/dirB
fileB

I should get zip/zipA containing fileA, zip/zipB containing fileB.

我使用的是基于此处答案的代码: gradle task to zip multiple directories independently本质上,我为要创建的每个zip Artifact 创建一个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')
}
}
}

问题似乎出在排除模式中。我得到了子目录的正确zip,但父目录包含 fileAdirB/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

关于gradle - 如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48101248/

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