2014-09-22 82 views
0

我们有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解决这个问题?

+0

我建议你看看这个解决方案:[copy-to-multiple-destinations-with-gradle-copy-task](http://stackoverflow.com/a/13494584/108350),看看你能否适应它适合你的问题。 _trick_似乎是将参数放入任务中。我把你的[A,B,C]列表放入一个变量中并在任务体内使用它。我认为如果你仍然想要,你可以让这种方法奏效。 – will 2017-04-12 01:29:28

回答

2

这个签名没有add方法,但是您可以使用tasks.create("zipIt$targetName", type: Zip) { ... }。有关API的详细信息,请查看Gradle Build Language Reference,该链接进一步链接到Javadoc/Groovydoc。