Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gradle task to zip multiple directories independently

I am trying to create a task that looks inside a folder and zips all the folders within that folder to some output folder.

Initial state:

Folder1
    -> project1
        ->code //some more files within project1
    -> project2
        ->code

Target state:

Destination
    project1.zip
    project2.zip

I tried using the below code, but it is zipping all the content within the folder1

task myZip(type: Zip) {
   from 'Folder1'   
   archiveName 'Compress.zip'
   destinationDir file('build')
}

I probably might need to use some collections which contains the project1 and project2 info and iteratively zip to the destination folder. Having issues with this approach.

like image 366
Sammy Avatar asked Mar 09 '23 07:03

Sammy


1 Answers

Each Gradle Zip task can only create a single Zip file, as you can read here.

So, you need to create multiple tasks. Therefore, you can iterate over the subdirectories and create a new Zip task for each one of them. The generated tasks can be bundled in a root task via dependsOn:

task myZip() {
    file('Folder1').eachDir { sub ->
        dependsOn tasks.create("${name}_${sub.name}", Zip) {
            from sub
            baseName sub.name
            destinationDir file('Destination')
        }
    }
}
like image 157
Lukas Körfer Avatar answered Mar 16 '23 08:03

Lukas Körfer