Gradle将多个文件解压缩到单个副本任务中的不同目录

时间:2015-03-06 01:47:46

标签: gradle

我正在编写一个gradle脚本,从我们的repo manager下载一系列tarball。让我们假设我的临时目录如下:

温度/ lib_x86.tar.gz

温度/ lib_armv7.tar.gz

温度/ lib_armv7s.tar.gz

温度/ lib_arm64.tar.gz

我想要做的是将所有这些文件解压缩到不同目录中,因为所有tarball都包含相同的静态库,但是针对不同的体系结构进行了编译。我的最终目标是创建一个胖库,但无法找到一种简洁的配置复制任务的方法。 到目前为止,我有:

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'           
        }
}

问题是它似乎仅适用于其中一个文件,即使print语句显示它处理所有4个文件。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

好的,已经解决了。在示例中,您提供的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