创建一个任务,该任务使用参数执行另一个任务

Create a task that executes another task with arguments

如何创建一个任务来执行另一个带参数的任务?

taskB 将从命令行接收参数(这里它被硬编码为 val1 和 val2)我想将这些参数传递给其他任务 - 例如 taskA 和 taskC,并定义它们的顺序被执行。

这是我试过的方法,但没有用

task taskB(){
    def val1 = '1'
    def val2 = 'abc'

    dependsOn "taskA -PparamA=$val1 -PparamB=$val2",
              "taskC -PparamA=$val1 -PparamB=$val2"

    taskC.mustRunAfter taskA
}

你可以这样做:

task taskA() << {
    //properties are printed during the execution phase
    println paramA
    println paramB
}

task taskC() << {
    //properties are printed during the execution phase
    println paramA
    println paramB
}

task taskB(){
    def val1 = '1'
    def val2 = 'abc'

    //here you set task properties
    taskA.ext.paramA=val1
    taskA.ext.paramB=val2

    //here you set task properties
    taskC.ext.paramA=val1
    taskC.ext.paramB=val2

    //provide task depoendencies
    dependsOn taskA, taskC
    //and tasks order
    taskC.mustRunAfter taskA
}

在那种情况下 ext 意味着,这个 属性 不是全局的,而仅由任务本身拥有。

上面示例的问题在于,taskB 传播的值仅在执行阶段在 taskAtaskC 中可用。如果在配置过程中需要它们,可以将它们作为项目属性传递,例如:

task taskB(){
    def val1 = '1'
    def val2 = 'abc'

    //here you set project properties
    project.ext.paramA=val1
    project.ext.paramB=val2
}

task taskA() {
    //properties are printed during the configuration phase
    println project.ext.paramA
    println project.ext.paramB
}

task taskC() << {
    //properties are printed during the execution phase
    println project.ext.paramA
    println project.ext.paramB
}

//provide task depoendencies
taskB.dependsOn taskA, taskC
//and tasks order
taskC.mustRunAfter taskA