21

gradle ビルド ファイルでは、特定のタスクに対して実行される項目を指定する方法が複数あります。doFirst メソッドは、タスク アイテムをタスク スタックの一番上に置き、そのアイテムがタスク スタックの残りの部分より前に実行されるようにします。これは、メイン タスクの前にいくつかの準備項目を実行する必要がある場合に非常に便利です。実際、doFirst を数回呼び出すと、最後の呼び出しで追加された項目が最初に実行されます。

理論的には、doLast は同様の処理を行う必要がありますが、タスクのメインの実行が完了した後に doLast を呼び出す必要があります。しかし、gradle 1.2 では、doLast を呼び出して、gradle.build ファイルの doLast の後にメイン タスクに何かを追加すると、メイン タスク アイテムは最後に呼び出されたアイテムになります。たとえば、次の gradle ビルド ファイルは次のようになります。

task myTask

myTask << {
    println "myTask main execution block"
}

myTask.doFirst {
println "myTask doFirst call one"
}

myTask.doFirst {
    println "myTask doFirst call two"
}

myTask.doLast {
    println "myTask doLast"
}

myTask << {
    println "myTask more main execution block"
}

次の出力が生成されます。

:myTask
myTask doFirst call two
myTask doFirst call one
myTask main execution block
myTask doLast
myTask more main execution block

BUILD SUCCESSFUL

Total time: 1.585 secs

私の質問は次のとおりです。doLast の意図は、単純にタスクの最後にステップを追加することですか (doFirst が最初に追加されるように)? もしそうなら、doFirst で対称性を提供することを除いて、doLast は無意味に思えます。ユーザーは単に myTask << {...} を実行して、末尾に何かを追加できます。doLast は、メインの実行ブロックの後に「doLast」アイテムが確実に実行されると考えていました。

これは単にgradleのdoLastが機能するはずの方法ですか、それともバグですか?? (または、doLastを呼び出した後にメインの実行ブロックに何かを追加するのは愚かですか?これは、別の実行ブロックを追加した後の単純な間違いでした)。

4

1 に答える 1

36

<<は のエイリアスであるためdoLast、ここではすべてが期待どおりに機能します。

于 2012-11-22T03:32:13.957 に答える