在Gradle中多次调用Zip任务

在Gradle中多次调用Zip任务,gradle,Gradle,我需要更新9个zip文件和代码做这是大约15行。 我不希望在构建脚本中用不同的变量名重复相同的15行9次 可以从另一个任务调用循环中的Zip任务吗 使用动态任务似乎是一种方法,但它需要我列出两次任务数组,我可以看到在将来添加额外项目时会导致错误 [war1, war2, war3, war4, war5, war6, war7, war8, war9].each { warName -> task "task$warName"(type: Zip) { archiv

我需要更新9个zip文件和代码做这是大约15行。 我不希望在构建脚本中用不同的变量名重复相同的15行9次

可以从另一个任务调用循环中的Zip任务吗

使用动态任务似乎是一种方法,但它需要我列出两次任务数组,我可以看到在将来添加额外项目时会导致错误

[war1, war2, war3, war4, war5, war6, war7, war8, war9].each { warName ->
    task "task$warName"(type: Zip) {
        archiveName = "${warName}.war"          
        //etc etc
    }
}
task all(dependsOn: [taskwar1, taskwar2, taskwar3, taskwar4, taskwar5, taskwar6, taskwar7, taskwar8, taskwar9]) {

}

有其他选择吗?

一种方法是将“war”名称列表存储在
ext
属性中,然后对其进行迭代以创建任务,并使用映射函数定义
all
任务的依赖项

// Define the variables here
ext.warTaskPrefix = "task"
ext.warNames = ["war1", "war2", "war3", "war4", "war5", "war6", "war7", "war8", "war9"]

// Define the war task dynamically
warNames.each { warName ->
    task "${warTaskPrefix}${warName}"(type: Zip) {
        archiveName = "${warName}.war"          
        //etc etc
    }
}

// Define the task that depends on all war tasks
task all(dependsOn: warNames.collect{ warName -> "${warTaskPrefix}${warName}" }) {

}

所有代码的第一部分可能会简化为:

task allWars

(1..9).each { id ->
   task "taskwar${id}"(type: Zip) {
      archiveName = "war${id}.war"
   } 
   allWars.dependsOn "taskwar${id}"
}
还有一个任务解决方案:

tasks.addRule('Pattern:taskwar'){String taskName->
if(taskName.startsWith('taskwar')){
任务(任务名称,类型:Zip){
archiveName=“${taskName-'task'}.war”
}
}
}
所有战争的任务{

dependsOn任务规则也可能是解决方法。@Opal你能举一个使用任务规则作为答案的例子,以及它与此答案的优缺点吗。谢谢。我意识到我不需要前缀,这会使它更简化,不需要collect参数。我接受@Opal answer只是因为它有两个选项。实际上,我的名字不是数字ical所以我仍然需要一个数组,但在for-each循环中添加dependsOn是我不知道你能做的事情!使用groovy&gradle,有很多很多方法可以达到预期的目标。这绝对是一个更干净、更简洁的解决方案。投票结果是一致的。谢谢@InvisibleArrow!今天早上我也投票了你的答案:)
tasks.addRule('Pattern: taskwar<ID>') { String taskName ->
    if (taskName.startsWith('taskwar')) {
        task(taskName, type: Zip) {
            archiveName = "${taskName - 'task'}.war"
        }
    }
}

task allWars {
   dependsOn << (1..9).collect { "taskwar$it" }
}