次の2つのコードスニペットの違いは何ですか?
初め:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
2番:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
次の2つのコードスニペットの違いは何ですか?
初め:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
2番:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
つまり、最初のスニペットは間違っており、2番目のスニペットは正しくなっています。
Gradleビルドは、初期化、構成、実行の3つのフェーズで進行します。タスクのようなメソッドfrom
とinto
構成は、構成フェーズで呼び出す必要があります。ただし、<<
(のショートカット)はタスクアクションdoLast
を追加します。タスクが実行された場合に何を実行するかをタスクに指示します。つまり、最初のスニペットは実行フェーズでタスクを構成し、さらに悪いことに、メイン(コピー)アクションが実行された後に構成します。したがって、構成による影響はありません。
通常、タスクには、タイプ(すでにタスクアクションを実行している)または(アドホックタスクの場合)のいずれかがあります。両方を持つ(タスクの「メイン」作業の後に少しカスタム作業を行う)ための正当なユースケースがありますが、多くの場合、タスクの構成が遅すぎるのは間違いです。<<
暗号化が少なく、そのような間違いを見つけやすくなるため、通常はdoLast
の代わりに使用することをお勧めします。<<
(概念を理解すれば、それtask copyFiles(type: Copy) { doLast { from ... } }
が間違っていることは明らかです。)