Gradle将zip压缩为buildDir

rom*_*afe 14 gradle

我的项目有一个远程依赖项,它实际上只是某些文件的zip,需要在某处解压缩,以便构建可以从文件生成新的java源代码.(我说的一般是关注核心问题而不是具体细节)

我不希望这会如此困难,但我一直无法让它发挥作用.这是我创造的:

我定义了一个新配置:

configurations {
    newConf
}
Run Code Online (Sandbox Code Playgroud)

后来,我为这种混淆定义了一个依赖.它解析为我需要爆炸的zip文件:

dependencies {
    newConf "group:name:version@zip"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这些气味对我来说都是正确的,但如果有人不同意,我正在听.

最后,我需要定义一个将zip分解为目录的任务,然后该目录将成为以后代码生成命令的输入.

task explodeModel {
    description = "unzip model into the specified 'modelSrc' directory"

    //input is a "files" collection (usually just one:  the zip)
    //output is the specified modelSrc dir

    File modelSrc = new File("$buildDir/modelSrc")
    outputs.files modelSrc

    doLast {
        configurations.newConf.allArtifacts.each { artifact -> println artifact }
    }

}
Run Code Online (Sandbox Code Playgroud)

显然doLast还没有解压缩任何东西,我只是试图获得zipfile本身的绝对路径,那就是我被卡住的地方.我不知道如何获取文件的路径,以便我可以解压缩它.有帮助吗?

非常感谢

rod*_*ion 12

尝试这些方面的东西,它应该工作:

task explodeModel(type: Copy){
  configurations.newConf.filter { it.toString().endsWith(".zip") }.each{
    from zipTree(it)
  }
  into 'output/dir'
}
Run Code Online (Sandbox Code Playgroud)

当然,.zip如果您确定配置中的工件是拉链,则可以省略过滤部分.


Ben*_*hko 5

我在一个插件中做了类似的事情.这应该适合你:

configurations.newConf.singleFile
Run Code Online (Sandbox Code Playgroud)

假设只有一个文件.返回类型是java.io.File.有关更多信息,请查看此课程GaePlugin.groovy.相关的方法是configureDownloadSdk.解压缩的任务是GaeDownloadSdkTask.groovy.