使用Gradle动态创建多个目录中的多个ZIP

时间:2017-06-16 11:37:25

标签: gradle build zip

我的构建中有一个相对复杂的目录结构,我想从中创建多个ZIP文件。结构是这样的:

+ project root
    + -- build.gradle
    + -- + foo
         + -- bar-1
         |   + -- bar-1.a.json
         |   + -- bar-1.a.xml
         |   + -- bar-1.b.json
         |   + -- bar-1.b.xml
         |
         + -- bar-2
         |   + -- bar-2.a.json
         |   + -- bar-2.a.xml
         |   + -- bar-2.b.json
         |   + -- bar-2.b.xml
         |
         + ...
         + -- bar-n
             + -- bar-n.a.json
             + -- bar-n.a.xml
             + -- bar-n.b.json
             + -- bar-n.b.xml

从这个结构中,我想为每个bar-x目录创建ZIP文件,例如:在foo/bar-1目录中,应在out/foo/bar-1.zip中创建一个ZIP文件,从foo/bar-2创建一个ZIP文件应在out/foo/bar-2.zip中创建,依此类推

重要的是,新目录可能会在稍后出现,因此我无法对名称进行硬编码,Gradle应在每个版本的foo中列出目录。

有人可以给我一个如何实现这个目标的样本吗?

1 个答案:

答案 0 :(得分:3)

以下内容应该如下:

task zipAll
file('foo').eachDirMatch(~/bar-.*/) { barDir ->
    def taskName = "zip${barDir.name.capitalize()}"
    task "$taskName"(type: Zip) {
        from barDir
        destinationDir file('out/foo/')
        baseName barDir.name
    }
    zipAll.dependsOn taskName
}