2013-07-03 22 views
11

最終出力ファイルをGradleでビルドした後、私は2つのことをしたいと思います。ローカルのversion.propertiesファイルを更新し、最後の最終出力を特定のディレクトリにコピーしてアーカイブします。私がすでに説明した2つのメソッド、すなわちupdateVersionProperties()archiveOutputFile()を既に実装しているとしましょう。Gradleでタスクの依存関係やtask.doLastを使用する方が良いですか?

私はこれを行うための最善の方法です何...

オルタナティブA疑問に知っている:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

オルタナティブB:

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

そして、ここに私がmyBuildTaskを呼ぶだろうの代わりにを使用してください。代替品と同様に、となります。

これをお勧めする方法は、どれですか?一方の利点は他にもありますか?いくつかの説明をお願いしますか。:)

答えて

13

可能な限り、新しいアクティビティを別々のタスクとしてモデル化します。 (あなたのケースでは、あなたは複数のタスクを追加できます。)これは、多くの利点があります:

  • より良いフィードバックを現在どのアクティビティを実行しているか、すべての刈り取り作業の入力と出力を(宣言する
  • 能力を失敗するとこのことから来るメリット)
  • 既存のタスクの種類に
をGradleのは、並列
  • でタスクを実行するため
  • もっと可能性等を再利用する機能

    アクティビティを別のタスクとしてモデル化することは容易ではないことがあります。 (既存のタスクのアウトプットを後処理する必要がある場合の1つで、これを別のタスクで実行すると、その後の実行で元のタスクがup-to-dateになることはありません)。既存のタスクはdoLastです。

  • +1

    これらのタスクの依存関係をどのように作成することをお勧めしますか?私は一つのタスクがプロジェクト全体をアセンブルすることを望みます(基本的には "assembleRelease'を"置き換える ")。そして、両方のタスクは' assembleRelease'の**実行が成功した後にのみ**実行されなければなりません。それらの間で、順序は本当に関係ありません。 –

    +6

    'myBuildTask.dependsOn(updateVersionProperties、archiveOutputFile); updateVersionProperties.dependsOn(assembleRelease); archiveOutputFile.dependsOn(assembleRelease) ' –

    関連する問題