java - Gradle附加zip存档

标签 java gradle groovy

我需要将文件添加到现有的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()
  }
}
还有其他解决方法吗?

最佳答案

您可以使用Project.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")
}
  • 请参阅Project.zipTree(...)
  • 请参阅AbstractCopyTask.from(...)
  • 关于java - Gradle附加zip存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63776713/

    相关文章:

    java - Hibernate:我什么时候应该使用 Cascade.ALL 什么时候应该单独指定它们

    java - 使用灵活适配器的粘性节标题 RecyclerView?

    grails - 我可以将参数从 Controller 传递到服务类吗

    java - 从 java/groovy 中的文本文件读取导入

    java - readResolve 不起作用? : an instance of Guava's SerializedForm appears

    java - string = string.trim();不好的做法?

    java - 如何使用具有多个 jdk 版本的 gradle 构建多个项目?

    android - Android Studio 0.8-不再运行自定义任务

    gradle - 如何从 Gradle 中运行 Kotlin-Script (*.kts) 文件?

    list - Groovy 获取某个索引下列表中的所有元素