首页 > 解决方案 > Gradle 附加 zip 存档

问题描述

我需要将文件添加到现有的 zip 存档中。我尝试使用 Gradle Zip Task,但它覆盖了我的存档。

我现在已经解决了如下问题

import java.nio.file.FileSystem
import java.nio.file.FileSystems
import java.nio.file.Files
import java.nio.file.Paths
import java.util.function.Consumer

task AddToZip() {
  doLast {
    FileSystem fs = FileSystems.newFileSystem(Paths.get("$pathToZip"), null)
    Files.walk(Paths.get("$rootDir/dir")).forEach(new Consumer<java.nio.file.Path>() {
      @Override
      void accept(java.nio.file.Path path) {
        java.nio.file.Path dest = fs.getPath(path.toString().substring("$rootDir".length()))
        if (path.toFile().isDirectory()) {
          Files.createDirectory(dest)
          return
        }
        Files.copy(path, dest)
      }
    })
    fs.close()
  }
}

有没有其他方法可以解决这个问题?

标签: javagradlegroovy

解决方案


您可以使用从原始 zipProject.zipTree(...)创建一个。FileTree然后可以将其传递给Zip.from(...)

task addToZip(type:Zip) {
   from zipTree('path/to/original.zip')
   from 'path/to/additional/file.txt'
   archiveFileName = "updated.zip"
   destinationDirectory = file("$buildDir/zips")
}

推荐阅读