4

ビルドの種類 (例: デバッグ/リリース) に応じて動作をわずかに変更する単純な同期タスクを作成したいのですが、gradle.taskGraph.whenReady で宣言されたブール変数「ダミー」を使用します。

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. whenReady を除く他の場所でいくつかのビルド プロパティを検出/セットアップする
  2. 同期タスクの作業を doLast に移動する
  3. または、少なくとも同期タスクのショートカットがあります(.execute()はかなり見栄えが悪いです)
4

1 に答える 1

2

1)whenReadyイベントにより、ユーザーは完全に初期化されたタスク グラフにアクセスできます。すべての初期化が完了し、タスクを実行する準備ができています。ここでビルド プロパティを検出/セットアップする必要がある唯一の状況は、現在のビルド セットアップをイントロスペクトする必要がある場合です。この情報が必要ない場合は、初期化をビルド スクリプトの任意の場所に配置できます。あくまでGroovy Scriptに他なりません。

    プラグインを適用: 'java'
    def now = new Date()
    compileJava.doFirst {
      println "${now} です。コンパイルを開始します"
    }

2) 同期タスクの作業を doLast に移動することはできません。しかし、いつでもアクションを doFirst に追加できます ;) これはうまくいくはずです:

タスク copySkins(タイプ: 同期) {
  from スキンFrom
  スキンへ
  スキンの名前を変更する名前を変更する
  symbian を除外Exclude

  doFirst {
    (!dummy) の場合は、dummyExclude を除外します。
  }
}

3) 先に述べたように、同期タスクのショートカットがないことはそれほど苦痛ではありません。

于 2011-01-14T17:05:55.890 に答える