2012-02-09 85 views
7

在gradle構建腳本中確定doFirst方法的順序如何?我有以下示例腳本包含兩個doFirst方法。據我所知,他們是添加劑,因爲它們都執行,但出現這種情況的順序看起來落後:Gradle doFirst()執行順序

task initialize 
task depTask(dependsOn: initialize) 

initialize { 
    doFirst { 
     println 'processing doFirst in initialization (configuration)' 
    } 

    println 'processing initialize (configuration)' 
} 

depTask { 
    println 'processing depTask (configuration)' 
} 

depTask << { 
    println 'executing depTask (execution)' 
} 

initialize << { 
    println 'executing initialize (execution)' 
} 

initialize.doFirst { 
    println 'executing doFirst on initialize (execution)' 
} 

從這個腳本的輸出是:

processing initialize (configuration) 
processing depTask (configuration) 
executing doFirst on initialize (execution) 
processing doFirst in initialization (configuration) 
executing initialize (execution) 
executing depTask (execution) 

第一個「doFirst」函數的定義在初始化任務中。第二個是在配置塊之外定義的。爲什麼第一個實例在第二個實例之前沒有執行?執行順序看起來落後。我希望第一個在配置定義中首先執行。任何幫助理解這一點,將不勝感激。

+0

'println'在初始化(配置)中處理doFirst''我不認爲這發生在配置階段。 – 2016-04-05 13:40:28

回答

14

initialize { doFirst { ... } }initialize.doFirst { ... }是完全一樣的東西。兩個語句都在任務的動作列表的前面插入一個動作。因此,稍後插入的動作(在本例中,在腳本中進一步向下)將首先執行。

+1

好的,所以這個工作就像一個堆棧? (後進先出 - LIFO)。 – jmq 2012-02-09 01:38:51

+0

nm,我測試過了。感謝您指點我正確的方向。 – jmq 2012-02-09 02:00:17