2013-03-26 10 views
10

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

まず:

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

第二:要するに

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

答えて

15

、最初のスニペットは、それが間違って取得され、2つ目は、右のそれを得ています。

グラデーションのビルドは、初期化、構成、および実行の3つのフェーズで進行します。 fromintoのようなメソッドはに設定されているため、設定フェーズで呼び出す必要があります。しかし、<<は(doLastのショートカットである)タスク・アクションを追加する - それは、それが実行されます場合と行うにはどのようなタスクに指示します。言い換えれば、最初のスニペットは、実行フェーズでタスクを構成し、さらに悪いことに、のメイン(コピー)アクションが実行された後にとなります。したがって、構成は効果を持ちません。

は典型的には、タスクは、いずれか(既にタスク・アクションに沿ってもたらす)タイプ又は<<(アドホックタスクのための)を有しています。両方を持つ正当なユースケースがあります(タスクの「主な」作業の後にカスタム作業を少し行います)が、頻繁にはそうではありません。タスクが遅すぎるように構成されている間違いです。

私は一般に<<の代わりにdoLastを使用することをお勧めします。なぜなら、それはあまり秘密ではなく、そのような間違いを見つけやすくなります。 (概念を理解すると、task copyFiles(type: Copy) { doLast { from ... } }が間違っていることが明らかです)

1

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

第2ブロックはタスクを作成して構成します。これらの命令は、「構成」ライフサイクル段階で実行されます。

hereあなたが

hereは、ライフサイクル

程度のGradleガイドでのGradleタスクの深さの説明を見つけることができるの違い

hereの明確な説明を見つけます