2011-01-07 12 views
4

ビルドの種類(debug/releaseなど)によって動作が少し変更されるシンプルな同期タスクを作成したいと思います。ブール変数 'dummy' gradle.taskGraph.whenReadyに:組み込みのgradleタスクを動かすことで作業が遅く/組み込みタスクshourtcuts

gradle.taskGraph.whenReady {taskGraph -> 
    dummy = false 
    if (taskGraph.hasTask(':dummybuild')) { 
    dummy = true 
    } 
} 

問題は、それが「ダミー」変数にアクセスすることはできませんので、以下の方法により構成され、そのタスクは、すなわちwhenReady前に、構成スコープを持っている:

task copySkins(type: Sync) { 
    from skinsFrom 
    into skinsInto 
    rename skinsRename 
    exclude symbianExclude 
    if (!dummy) exclude dummyExclude 
} 

今すぐこの回避策を使用しています

task copySkins { 
    inputs.dir skinsFrom 
    outputs.dir skinsInto 

    doLast { 
    task skins(type: Sync) { 
     from skinsFrom 
     into skinsInto 
     rename skinsRename 
     exclude symbianExclude 
     if (!dummy) exclude dummyExclude 
    } 
    skins.execute() 
    } 
} 

は(それも可能

  1. doLast
  2. に/セットアップwhenReady
  3. 移動同期タスクの作業を除き、他のいくつかの場所でいくつかのビルドプロパティを検出
  4. または少なくとも

    には、同期タスクのためのいくつかのショートカットを持っているです.execute()はかなり醜いです)

答えて

2

1)whenReadyイベントは完全に初期化されたタスクグラフにアクセスできるようにします:すべての初期化タスクは実行準備が整っています。ここでビルドプロパティを検出/設定する必要がある唯一の状況は、現在のビルド設定をイントロスペクトする必要がある場合です。 この情報が必要ない場合は、ビルドスクリプトのどこにでも初期設定を置くことができます。最後に、それはグルーヴィーなスクリプトです。

 
    apply plugin: 'java' 
    def now = new Date() 
    compileJava.doFirst { 
     println "It is ${now}. We are starting to compile" 
    } 

2)同期タスク作業をdoLastに移動することはできません。それはGradleのようです)

 
task copySkins(type: Sync) { 
    from skinsFrom 
    into skinsInto 
    rename skinsRename 
    exclude symbianExclude 

    doFirst { 
    if (!dummy) exclude dummyExclude 
    } 
} 

3)全ての前に言って、同期タスクのショートカットが欠落すると、そのpainfull

+2

1すべきではない:私は、これは動作するはずだと思う);しかし、あなたは常にdoFirstにあなたの行動を追加することができますDAGはsyncのようなbuit-inタスクを設定するのに全く役に立たず、悪いです。a)whenReadyは設定フェーズの後にのみ呼び出され、syncはその間に実行されます。b)これにより、debug + releaseのようなマルチビルド設定は不可能になります。私はgradle-userにこれを追い払う別の質問を投稿します。ML 2)これは動作しません - タスクは設定フェーズで実行され、doFirstは '実行'フェーズで実行されます – thevery

関連する問題