gradle任务以独立压缩多个目录

Sam*_*mmy 3 gradle build.gradle

我正在尝试创建一个任务,该任务看起来在一个文件夹内,并将该文件夹内的所有文件夹压缩到某个输出文件夹。

初始状态:

Folder1
    -> project1
        ->code //some more files within project1
    -> project2
        ->code
Run Code Online (Sandbox Code Playgroud)

目标状态:

Destination
    project1.zip
    project2.zip
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码,但它压缩了folder1内的所有内容

task myZip(type: Zip) {
   from 'Folder1'   
   archiveName 'Compress.zip'
   destinationDir file('build')
}
Run Code Online (Sandbox Code Playgroud)

我可能需要使用一些包含project1和project2信息的集合,并将其迭代地压缩到目标文件夹。这种方法有问题。

Luk*_*fer 6

每个Gradle Zip任务只能创建一个Zip文件,您可以在此处阅读

因此,您需要创建多个任务。因此,您可以遍历子目录并Zip为每个子目录创建一个新任务。生成的任务可以通过以下方式捆绑到根任务中dependsOn

task myZip() {
    file('Folder1').eachDir { sub ->
        dependsOn tasks.create("${name}_${sub.name}", Zip) {
            from sub
            baseName sub.name
            destinationDir file('Destination')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)