Gradle 在单个复制任务中将多个文件解压到不同的目录

Gradle untar multiple files to different directories in single copy task

我正在编写一个 gradle 脚本,用于从我们的存储库管理器下载一系列压缩包。假设我有一个如下所示的临时目录:

temp/lib_x86.tar.gz

temp/lib_armv7.tar.gz

temp/lib_armv7s.tar.gz

temp/lib_arm64.tar.gz

我想做的是通过一个复制任务将它们全部解压到不同的目录中,因为所有的压缩包都包含相同的静态库,但针对不同的体系结构编译。我的最终目标是从中创建一个胖库,但无法找到配置复制任务的简洁方法。 到目前为止我有:

copy {
    fileTree(dir: 'temp').include('*.tar.gz').each {File simLib ->
        println "Untar ${simLib.name}"
            from tarTree(resources.gzip(simLib.name))
            into "temp/${simLib.name}"
            include '*.a'           
        }
}

问题是它似乎只对其中一个文件有效,尽管打印语句显示它处理了所有 4 个文件。 有什么想法吗?

好的,已经解决了。在您提供的示例中,copy 块将配置一次 - 最后一次获胜 - 更具体地说,列表中的最后一个设置将覆盖所有以前的设置。它需要被扭转。可以通过以下方式完成:

fileTree(dir: 'tmp').include('*.tar.gz').each { simLib ->
   copy {
      println "Untar $simLib.name"
      def name = simLib.name - '.tar.gz'
      from tarTree("tmp/${simLib.name}")
      into "tmp/$name"       
   }
}

演示是 here