如何使用Gradle动态创建多个ZIP文件?
问题描述:
我们有Gradle任务在我们的项目中创建ZIP文件。这就像吼声。如何使用Gradle动态创建多个ZIP文件?
task createZipFile(type: Zip) {
destinationDir new File("$projectDir")
archiveName 'ABC.zip'
from('bin/libs') {
include '**/*.jar'
}
...
}
build.dependsOn(createZipFile)
我们需要动态创建不同名称的多个zip文件。我们已经试过它了。
['A', 'B', 'C', 'D'].each { def targetName ->
tasks.add(name: "zipIt$targetName", type: Zip) {
destinationDir = file("${targetName}.zip")
from('bin/libs') {
include '**/*.jar'
}
}
}
task zipAll(dependsOn: tasks.matching { Task task -> task.name.startsWith("zipIt")})
build.dependsOn(zipAll)
当我们尝试这个时,我们得到以下错误。
找不到方法参数的add()[{名= zipItA,类型= A类 org.gradle.api.tasks.bundling.Zip}, build_1bct5119tk0khpl3p142j9qck5 $ @ _run_closure6_closure18 47b8c9d
我们如何用Gradle解决这个问题?
答
这个签名没有add
方法,但是您可以使用tasks.create("zipIt$targetName", type: Zip) { ... }
。有关API的详细信息,请查看Gradle Build Language Reference,该链接进一步链接到Javadoc/Groovydoc。
我建议你看看这个解决方案:[copy-to-multiple-destinations-with-gradle-copy-task](http://*.com/a/13494584/108350),看看你能否适应它适合你的问题。 _trick_似乎是将参数放入任务中。我把你的[A,B,C]列表放入一个变量中并在任务体内使用它。我认为如果你仍然想要,你可以让这种方法奏效。 – will 2017-04-12 01:29:28