代码之家  ›  专栏  ›  技术社区  ›  opticyclic

分级多次调用Zip任务

  •  4
  • opticyclic  · 技术社区  · 11 年前

    我需要更新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]) {
    
    }
    

    还有其他选择吗?

    2 回复  |  直到 11 年前
        1
  •  7
  •   Noumenon    11 年前

    您的所有代码可能会简化为:

    task allWars
    
    (1..9).each { id ->
       task "taskwar${id}"(type: Zip) {
          archiveName = "war${id}.war"
       } 
       allWars.dependsOn "taskwar${id}"
    }
    

    还有一个任务解决方案 rules :

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

    在功能方面,几乎没有明显的利弊。基本上,没有规则的解决方案比你看到的更短,所以如果你代表态度 代码越少越好 这就是要走的路。然而,任务规则是针对这类情况创建的,其中有很多 预定义的 任务。第一个解决方案是 开槽机 而第二个更多 平地机 ;)

        2
  •  3
  •   Invisible Arrow    11 年前

    一种方法是将“战争”名称列表存储在 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}" }) {
    
    }
    
    推荐文章