在gradle中执行期间多次运行同一任务

在gradle中执行期间多次运行同一任务,gradle,Gradle,在gradle有没有可能有以下类似的产品 task enableMe() << { println "Enable" } task disableMe() << { shouldRunAfter 'taskAwork' println "Disable" } task taskAwork(){ shouldRunAfter 'enableMe' println "do work in A while disabled" } task

在gradle有没有可能有以下类似的产品

task enableMe() << {   
   println "Enable"
}
task disableMe() << {
   shouldRunAfter 'taskAwork'
   println "Disable"
}

task taskAwork(){
   shouldRunAfter 'enableMe'
   println "do work in A while disabled"
}
task taskA(dependsOn: disableMe, taskAwork, enableMe){
}
task taskBwork(){
   shouldRunAfter 'enableMe'
   println "do work in B while disabled"
}
task taskB(dependsOn: disableMe, taskBwork, enableMe){
}

task taskC(dependsOn: taskA, taskB){
}
但目前,禁用和启用仅运行一次。。是否仍要设置状态,以便它们可以再次运行

我能想到的唯一方法就是重复这些任务

task enableMeA() << {   
   println "Enable"
}
task disableMeA() << {
   shouldRunAfter 'taskAwork'
   println "Disable"
}
task enableMeB() << {   
   println "Enable"
}
task disableMeB() << {
   shouldRunAfter 'taskBwork'
   println "Disable"
}

task taskAwork(){
   shouldRunAfter 'enableMeA'
   println "do work in A while disabled"
}
task taskA(dependsOn: disableMeA, taskAwork, enableMeA){
}
task taskBwork(){
   shouldRunAfter 'enableMeB'
   println "do work in B while disabled"
}
task taskB(dependsOn: disableMeB, taskBwork, enableMeB){
}

task taskC(dependsOn: taskA, taskB){
}

默认情况下,Gradle不会运行最新的任务。 如果任务的属性未更改,则认为它是最新的

如果要在同一执行过程中多次运行任务,可以使用属性定义一个谓词,每当要再次运行任务时,该谓词将返回false:

task myTask() {
    outputs.upToDateWhen {some_condition}

    // Do some stuff
}

似乎,在您的情况下,您必须为您的任务实现,并使用它的
beforexecute
afterExecute
方法来实现您的逻辑

这可能看起来像:

task taskAwork() << {
    println "do work in A while disabled"
}
task taskBwork() << {
    println "do work in B while disabled"
}

task doAllWorkTask(dependsOn: [taskAwork, taskBwork]){
}

gradle.taskGraph.addTaskExecutionListener new WorkTasksExecutionListener()

class WorkTasksExecutionListener implements TaskExecutionListener {

    @Override
    void afterExecute(final Task task, final TaskState state) {
        if (task.name.contains('work')) {
            println('Enabling smth before execution of work task')
        }
    }

    @Override
    void beforeExecute(final Task task) {
        if (task.name.contains('work')) {
            println('Disabling smth after execution of work task')
        }
    }
}

这根本不起作用。设置此outputs.upToDateWhen{false}在“myTask”中,然后运行命令行(gradle myTask someothertask myTask)仅运行“myTask”一次。它应该运行“myTask”两次看看这个
task taskAwork() << {
    println "do work in A while disabled"
}
task taskBwork() << {
    println "do work in B while disabled"
}

task doAllWorkTask(dependsOn: [taskAwork, taskBwork]){
}

gradle.taskGraph.addTaskExecutionListener new WorkTasksExecutionListener()

class WorkTasksExecutionListener implements TaskExecutionListener {

    @Override
    void afterExecute(final Task task, final TaskState state) {
        if (task.name.contains('work')) {
            println('Enabling smth before execution of work task')
        }
    }

    @Override
    void beforeExecute(final Task task) {
        if (task.name.contains('work')) {
            println('Disabling smth after execution of work task')
        }
    }
}
:taskAwork
Enabling smth after execution of work task
do work in A while disabled
Disabling smth before execution of work task
:taskBwork
Enabling smth after execution of work task
do work in B while disabled
Disabling smth before execution of work task
:doAllWorkTask