我有以下源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文件提取到命名的temp目录的情况下达到相同的结果-我当前的解决方案不太像“渐变方式”。
最佳答案
我采用以下结构:
- 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
提要。您的解决方案工作得很好,并且也代表了gradle的方式-请记住有关SRP的;)
关于gradle - 如何使用Gradle压缩嵌套zip的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013479/