10

次の2つのコードスニペットの違いは何ですか?

初め:

task copyFiles(type: Copy) << {
  from "folder/from"
  into "dest/folder"
}

2番:

task copyFiles(type: Copy) {
  from "folder/from"
  into "dest/folder"
}
4

2 に答える 2

16

つまり、最初のスニペットは間違っており、2番目のスニペットは正しくなっています。

Gradleビルドは、初期化、構成、実行の3つのフェーズで進行します。タスクのようなメソッドfrominto 構成は、構成フェーズで呼び出す必要があります。ただし、<<(のショートカット)はタスクアクションdoLastを追加します。タスクが実行され場合に何を実行するかをタスクに指示します。つまり、最初のスニペットは実行フェーズでタスクを構成し、さらに悪いことに、メイン(コピー)アクションが実行された後に構成します。したがって、構成による影響はありません。

通常、タスクには、タイプ(すでにタスクアクションを実行している)または(アドホックタスクの場合)のいずれかがあります。両方を持つ(タスクの「メイン」作業の後に少しカスタム作業を行う)ための正当なユースケースがありますが、多くの場合、タスクの構成が遅すぎるのは間違いです。<<

暗号化が少なく、そのような間違いを見つけやすくなるため、通常はdoLastの代わりに使用することをお勧めします。<<(概念を理解すれば、それtask copyFiles(type: Copy) { doLast { from ... } }が間違っていることは明らかです。)

于 2013-03-26T09:12:17.383 に答える
1

コードの最初のブロックはタスクを作成し、それにアクションを追加します。タスクは、タスクが呼び出されたときに順番に実行される命令ブロックであるアクションで構成されます

2番目のブロックは、タスクを作成して構成します。これらの命令は、gradleの「構成」ライフサイクルフェーズで実行されます。

ここに違いの明確な説明があります

ここでは、gradleタスクの詳細な説明を見つけることができます

これがライフサイクルに関するgradleガイドです

于 2013-03-26T09:12:30.907 に答える