如何使用gradle压缩嵌套zip的内容

时间:2015-08-14 15:22:21

标签: gradle

我有以下源zip文件(outer.zip),其中包含inner.zip文件,该文件本身包含两个.txt文件:

outer.zip          
   +--inner.zip   
         +--a.txt
         +--b.txt

我需要创建一个new.zip文件,其中包含inner.zip文件(两个.txt文件)的内容,即

new.zip           
   +--a.txt     
   +--b.txt

以下gradle似乎工作正常:

apply plugin: 'java'

task unzipInnerZip(type: Copy) {
    from (zipTree('outer.zip'))
    include 'inner.zip'
    into "${buildDir}/temp/extracted"
}

task buildNewZip(type: Zip, dependsOn: unzipInnerZip) {
    baseName = 'new'
    from (zipTree("${buildDir}/temp/extracted/inner.zip"))
}

assemble.dependsOn(buildNewZip)

我的问题是,如何在不将inner.zip文件解压缩到命名的临时目录的情况下实现相同的结果 - 我当前的解决方案并不像“gradle方式”。

1 个答案:

答案 0 :(得分:0)

我假设了以下结构:

- 2.zip
 - 1.zip
  - a.txt
  - b.txt

如果在上面,可以使用以下代码完成:

task buildZip(type: Zip) {
    baseName = 'new'
    from (zipTree(zipTree(file('2.zip')).files.find { it.name == '1.zip' }))
}

使用以下行:

zipTree(file('2.zip')).files.find { it.name == '1.zip' }
1.zip的条目中找到

2.zip。然后它被用作zipTree Feed。

您的解决方案完美无缺,也代表 gradle way - 记住SRP;)