Gradle Plugin:如果任务A或任务B,任务C应该运行:

时间:2017-08-22 18:11:43

标签: gradle build.gradle gradle-plugin

我正在创建自定义插件任务,并遇到需要帮助的情况。 我创建了3个任务。任务A,B,C在gradle中。 只有当A或B成功时,才能执行任务C. 请注意,A和B是两个独立的任务,不相关。

class A extends DefaultTask { }

class B extends DefaultTask { }

class C extends DefaultTask { }

如果我尝试C.dependsOn(A); C.dependsOn(B);,那么我认为C依赖于A B(不是A B)。有没有办法在这里指定A B条件。

2 个答案:

答案 0 :(得分:2)

Gradle为任务依赖和排序提供了四种方法(和相关容器):

样式:t1.<method>(t2)

  1. dependsOn - 确保t2执行如果执行 t1之前。

  2. finalizedBy - 确保t2执行,如果执行 t2后执行。

  3. mustRunAfter - 确保如果 t2t1都已执行(由其他触发器引起),t1为在 t2后执行

  4. shouldRunAfter - 基本上与mustRunAfter相同,但在特殊情况下可能会被忽略(请检查https://www.i18next.com/supported-frameworks.html)。

  5. 您的要求很特殊,并且无法通过上述简单方法解决。如果我理解你的问题,你需要确保任务C在任务A和B之后执行,但只有在任何时候执行它(而不是自动触发它)。您可以使用mustRunAfter来满足要求的第一部分。但是,您还希望确保之前执行任务A 任务B.我建议使用onlyIf方法跳过任务C的任务执行,如果之前没有执行过A或B.例如:

    task A { }
    task B { }
    
    task C {
        mustRunAfter A, B
        onlyIf { A.state.executed || B.state.executed }
    }
    

答案 1 :(得分:0)

您可以添加多个依赖项。

if (playerIsFlagged == true && player.distance < 10){
     doaction()
}

输出结果为:

task B << {
    println 'Hello from B'
}

task C << {
    println 'Hello from C'
}

task D(dependsOn: ['B', 'C'] << {
    println 'Hello from D'
}