2011-09-02 3 views

答えて

92

はGradleののキャッシュを再構築し-C rebuildでビルドを実行してみてください。あなただけの単一のタスクが常に実行したい場合のGradleの新しいバージョンで

は、タスクの内部でoutputsプロパティを設定することができ、

23

あなたは、あなたが

:someproject:sometask1 UP-TO-DATE 
:someproject:sometask2 UP-TO-DATE 
:someproject:sometask3 UP-TO-DATE 

を持っているあなたは、あなたが実行するタスクを実行する前に再度することができます

someproject:cleanSometask2 

を実行するためにsometask2を言わせて強制的にしたいとしましょうcleanTaskname

を使用することができますそれをすべて。どうやらのGradleで

、また自分自身をきれいにする方法を理解UP-TO-DATE理解してすべてのタスク。

+0

これは間違いなく動作します。 「cleanAll」タスクはありますか? –

+0

'gradle clean'はあなたがいるプロジェクトのすべてを消去します。これは基本的に、デフォルトで '/ build'のメイン出力フォルダを削除します。これはあなたが探していたものですか? –

+5

いいえ。指定されたタスクの出力ファイルとして最新のものが取り込まれていない場合、これは最新の状態に戻りません。つまり、ビルド・ブレークの一部があっても全体的に成功すれば、キャプチャされた状態は間違っており、クリアする必要があります。 –

66

--rerun-tasksを使用しています。上記のコードを使用した場合でも、

outputs.upToDateWhen { false } 

は、あなたのタスクは、任意の定義されたファイルの入力を持っていない場合、Gradleのタスクをスキップする場合がありますのでご注意ください。たとえば、ZipまたはCopyタスクでは、タスク定義の コンフィギュレーションフェーズで提供されるファイルが少なくとも1つ必要です。

+12

これは私のために何もしません。私はそれを仕事に加えて、 "UP-TO-DATE"を得る。面白いことは、それがZipTaskであり、私は宛先アーカイブを削除したことです。 – maaartinus

+4

これは、このような使用のために信じられないほどである: 'tasks.whenTaskAdded {th​​eTask - > IF(theTask.name.startsWith( "DEX")){ theTask.outputs.upToDateWhen {偽} theTask.doLast {タスク - >。 ..}}} ' –

+0

それは私のためには機能しません:( –

1

私は、タスクのsetOnlyIffalseに私はそれを実行するたびに設定されたままので、タスク内outputs.upToDateWhen { false }を設定したり、フラグ--rerun-tasksを追加することは助けにはならなかったタフなケースがありました。 build.gradleに以下を追加する

myTaskの実行を強制的に:

gradle.taskGraph.whenReady { taskGraph -> 
    def tasks = taskGraph.getAllTasks() 
    tasks.each { 
    def taskName = it.getName() 
    if(taskName == 'myTask') { 
     println("Found $taskName") 

     it.setOnlyIf { true } 
     it.outputs.upToDateWhen { false } 
    } 
    } 
} 
関連する問題