2017-07-19 99 views
4

我需要创建一个初始化任务,在我执行任何其他任务之前运行它。创建一个在gradle中的所有其他任务之前运行的任务

task A { 
    println "Task A" 
} 

task initializer { 
    println "initialized" 
} 

,如果我执行gradle -q A 输出将是

>initialized 

>Task A 

现在如果我将添加

task B{ println "Task B" }

和执行gradle -q B

我得到:

>initialized 

>Task B 

因此,我执行哪个任务并不重要,它总是首先被“初始化”。

回答

4

你可以让任何名字不是'初始化者'的任务都依赖于'初始化'任务。例如:

task initializer { 
    doLast { println "initializer" } 
} 

task task1() { 
    doLast { println "task1" } 
} 

// make every other task depend on 'initializer' 
// matching() and all() are "live" so any tasks declared after this line will also depend on 'initializer' 
tasks.matching { it.name != 'initializer' }.all { Task task -> 
    task.dependsOn initializer 
} 

task task2() { 
    doLast { println "task2" } 
} 

或者你可以添加一个BuildListener(或者使用的方便的方法之一,例如:Gradle.buildStarted(...)

0

好像你的目标是执行阶段,并且要任务precursing每个任务或只是作为运行执行阶段的第一项任务?

如果你想任务总是在每一个项目中的每个任务的其他前后其正在评估可以封闭添加到他主要的build.gradle执行:

allprojects { 
    afterEvaluate { 
    for(def task in it.tasks) 
     if(task != rootProject.tasks.YourTask) 
     task.dependsOn rootProject.tasks.YourTask 
    } 
} 

tasks.matching {it != YourTask}.all {it.dependsOn YourTask}您可以使用Task Execution Graph来定义生命周期。根据您的需求和项目结构,实现您的目标的方法很少。

+0

回答你的问题,我希望它永远是执行阶段的第一项任务。 –

+0

@OriWiesel那么为什么你已经接受了一个答案,用每个任务初始化任务? – LazerBanana

+0

也许我错过了一些东西。因为,那正是我所需要的......在所有其他任务之前运行的任务。 –