我有一个gradle任务buildZip
,它将两个目录的内容放到一个目录中。这两个目录均包含一个具有相同名称myFile.txt
的文件,但是它们的内容不同。这是原始目录结构:
foo/
├── bar/
│ └── myFile.txt # 10kB
└── baz/
└── myFile.txt # 20kB
Gradle任务将两个文件都放入存档的根目录中:
task buildZip(type: Zip) {
archiveName 'myArchive.zip'
includeEmptyDirs false
from('foo/bar') {
include 'myFile.txt'
}
from('foo/baz') {
include 'myFile.txt'
}
}
我假设第二个
from...include
将覆盖第一个myFile.txt
。相反,这是结果存档的结构:myArchive.zip
├── myFile.txt # 10kB
└── myFile.txt # 20kB
这导致一些奇怪的行为:
myFile.txt
的名称更改为myFile.txt.bkup
(通过WinZip)时,两个文件都相应地更改了名称。 myFile.txt
中后者foo/baz
的大小。 如果具有相同名称的文件已经存在,Gradle为什么不自动覆盖存档中的文件?为什么可以在同一目录中创建两个相同名称的文件而不覆盖一个文件?
最佳答案
我认为这是org.apache.tools.zip.ZipOutputStream
(gradle用于创建zip存档)的行为。在此类中,首先编写了zip条目 header ,我认为这就是zip文件看起来包含2个文件的原因。并且在写入实际文件的流时,它会覆盖前一个文件的内容(因为名称相同)。
Gradle Zip
ZipOutputStream
关于gradle - Gradle允许zip存档中两个具有相同名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283801/