次の2つのコードスニペットの違いは何ですか?Gradle Tasksの違い
まず:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
第二:要するに
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
次の2つのコードスニペットの違いは何ですか?Gradle Tasksの違い
まず:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
第二:要するに
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
、最初のスニペットは、それが間違って取得され、2つ目は、右のそれを得ています。
グラデーションのビルドは、初期化、構成、および実行の3つのフェーズで進行します。 from
とinto
のようなメソッドはに設定されているため、設定フェーズで呼び出す必要があります。しかし、<<
は(doLast
のショートカットである)タスク・アクションを追加する - それは、それが実行されます場合と行うにはどのようなタスクに指示します。言い換えれば、最初のスニペットは、実行フェーズでタスクを構成し、さらに悪いことに、のメイン(コピー)アクションが実行された後にとなります。したがって、構成は効果を持ちません。
は典型的には、タスクは、いずれか(既にタスク・アクションに沿ってもたらす)タイプ又は<<
(アドホックタスクのための)を有しています。両方を持つ正当なユースケースがあります(タスクの「主な」作業の後にカスタム作業を少し行います)が、頻繁にはそうではありません。タスクが遅すぎるように構成されている間違いです。
私は一般に<<
の代わりにdoLast
を使用することをお勧めします。なぜなら、それはあまり秘密ではなく、そのような間違いを見つけやすくなります。 (概念を理解すると、task copyFiles(type: Copy) { doLast { from ... } }
が間違っていることが明らかです)