2016-07-21 10 views
1

gradle fooの後に0000が終了しないのはなぜですか? doFirstfoo.doFirst{ delete '0000' }を削除すると、0000が表示されます。いつdoFirstがグラデルで実行される

doFirstは、fooタスクスクリプトの前に実行する必要があります。

ドキュメントは言う:

Task doFirst(Closure action) 

Adds the given closure to the beginning of this task's action list. The closure is passed this task as a parameter when executed. 

完全なコマンドログ:

isaac-mbp:swap isaac$ cat build.gradle 
task foo { 
    mkdir '0000/a' 
    mkdir '0000/b' 
} 
foo.doFirst{ delete '0000' } 

isaac-mbp:swap isaac$ gradle foo 
:foo 

BUILD SUCCESSFUL 

Total time: 0.581 secs 
isaac-mbp:swap isaac$ ls -lha 0000 
ls: cannot access 0000: No such file or directory 
isaac-mbp:swap isaac$ gradle -v 

------------------------------------------------------------ 
Gradle 2.14 
------------------------------------------------------------ 

Build time: 2016-06-14 07:16:37 UTC 
Revision:  cba5fea19f1e0c6a00cc904828a6ec4e11739abc 

Groovy:  2.4.4 
Ant:   Apache Ant(TM) version 1.9.6 compiled on June 29 2015 
JVM:   1.8.0_25 (Oracle Corporation 25.25-b02) 
OS:   Mac OS X 10.11.5 x86_64 

答えて

1

  1. タスクは(単純化)された順序で実行されているアクションのコレクション彼らが添加された。
  2. build.gradleは、2つの相で実行される:構成および実行

構成時間に追加されますので、次のコード内のロジック(mkdir s)はが実行される毎時間build.gradleが評価される:それを修正する

task foo { 
    mkdir '0000/a' 
    mkdir '0000/b' 
} 

- ANを追加アクション:

task foo << { 
    mkdir '0000/a' 
    mkdir '0000/b' 
} 

そして今doFirst

task foo << { 
     mkdir '0000/a' 
     mkdir '0000/b' 
} 
foo.doFirst { delete '0000' } 

今タスクが2つのアクションがありますmkdirs sおよびdeleteを、彼らは適切な順序で実行されます。どうぞご覧くださいhere

+0

ありがとうございます!本当に時間を節約しました。グラデル構成フェーズの詳細を学びます。 – isaac

+0

@isaac、答えが役に立つとわかったら、それを受け入れてください。 – Opal

関連する問題