2016-10-04 3 views
7

のように私はGradleのスクリプトを持っている:Gradle doFirstとdoLastの設計目的は何ですか?例えば

上記のいずれかのようにdoFirst & doLastの設計目的は何
myTask_B { 
    doFirst { 
     println "first string" 
     println "last string" 
    } 
} 

myTask_C { 
    doLast { 
     println "first string" 
     println "last string" 
    } 
} 

:以下の2つのタスクはまったく同じ実行結果を持って

myTask_A { 
    doFirst { 
     println "first string" 

    } 
    doLast { 
     println "last string" 
    } 
} 

タスクは同じ結果をもたらしますか?

答えて

9

拡張性、再利用、重複の回避と関係しています。タスクに建て1については

は次のように拡張することができます。

task CopyAndThen(type: Copy) { 
    doFirst { 
     println "this is before the actual copy" 
    } 
    doLast { 
     println "this is after the actual copy" 
    } 
} 

頭に浮かぶ第2の共通シナリオでは、共通の動作でプロジェクトの先頭にタスク定義を持つことができますmulti project builds、です:

allprojects { 
    task myTask_a { 
     doFirst {...} 
    } 
} 

そして、特定のプロジェクトでそれを拡張することができます。 タスクには基本的に実行する必要があるClosuresのリストと、挿入先リストの末尾にあるdoFirstまたはdoLastのコントロールの選択肢があります。

+1

複数のdoFirstまたはdoLastをタスクに宣言するとどうなりますか? – vargonian

+1

これは有効な設定です。それぞれの 'doFist'または' doLast'はリストに追加されるクロージャであり、順番に実行されます。複数の 'doLast'は' doFrist'の逆順で宣言された順に実行されます。 – Alpar

+1

ああ、ありがとう。私は本当にそれが "addFirst/Last"または "insertFirst/Last"という名前になっていたらいいと思います。 – vargonian

関連する問題