2017-07-19 34 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

也許我錯過了一些東西。因爲,那正是我所需要的......在所有其他任務之前運行的任務。 –

相關問題