2016-12-06 15 views
2

実行のGradle doLast、コピータスクでdoFirst行動

task hello (type: Copy) { 
    doLast { 
     println "print from within" 
    } 
    println "print from outside" 
} 

build.gradle

のGradle -qハロー

doLast {}クロージャーには触れません。 doLastまたはdoFirstなし

D:\>gradle -q hello 
print from outside 

:doFirstdoLastを変更、私は同じ結果を得る

task hello (type: Copy) { 
    //doLast{ 
     println "print from within" 
    //} 
    println "print from outside" 
} 

をそれが正常に動作します:

D:\>gradle -q hello 
print from within 
print from outside 

これは起こっているようですコピータイプのタスクを使用します。あなたは明確にするのを助けてくれますか?私はgradle 2.4を使用しています。

答えて

2

あなたは-qスイッチなしでタスクを実行する場合は、タスクがすでにUP-TO-DATEとしてマークされていることがわかります - 。doLastが実行された介して、何のアクション(とアクションを追加していないことを意味し

なぜそれがあるには?この特定の例では、タスクの入力と出力が設定されていません。Copyタスクは入力と出力の最新のベースであることを解決しますが、設定されていないので、実行する必要がないと仮定しています。

+0

私は実際に別のユースケースを試しました:** doLast {} **クロージャ内で**を**から**へ:**を追加してください。ソースファイルの内容が変更された場合、タスクの目的は基本的に宛先を更新することです。どうすればこれを達成できますか?実際にdoLast {}は、何があってもコピータイプのタスクには触れません。 – Heinz

+0

'doLast'は*実行時に実行されるため、' into'と 'from'が* configuration * phase - inで使用されるため、' doLast'の中に 'into'と' from'を入れるのは意味がありません'doLast'は何も設定するのが遅すぎます。タスクのボディ内で 'from'と' into'を使用すると、期待通りに動作します。また、あなたはgradleの基礎について読む必要があるようです。 [こちら](https://docs.gradle.org/current/userguide/build_lifecycle.html)の良い出発点 – Opal

+0

私の元の投稿は、特に "コピー"タイプのタスクについて質問しています。私はまだ困惑している。これは** build.gradle **ファイルです: 'task mycopy(タイプ:コピー){c:\ temp \ me.txtから 'd:/'}へ
タスクhello(){doLast {println 'Hello 、私は '}} '。 ** grale build.gradle hello **を実行すると、設定フェーズで実行する必要がありますが、** mycopy {} **内のコードは実行されません。私が間違っていることは何ですか? – Heinz

関連する問題