5

最初の Gradle プラグインを作成しようとしています。
1. プロパティの拡張子を追加します。project.extensions.create("abc", AbcExtension)
2. コピー タスクを定義します。次の方法でタスクを定義すると

project.task("abcTask", type: Copy) {
  from project.abc.fromPath
  into project.abc.intoPath
}

project.abc.fromPath が value と等しいAbcExtension.fromPath- から値を読み取りませんbuild.gradle
次の方法でタスクを定義すると

project.task("abcTask", type: Copy) << {
  from project.abc.fromPath
  into project.abc.intoPath
}

常に印刷さUP-TO-DATEれ、タスクは実行されません。

Pls はこの動作を説明し、Gradle プラグインでタスクを定義する正しい方法を教えてください (typeおよびdependsOn機能性)

4

1 に答える 1

12

プラグインは、変更可能なビルド モデル値 (つまり、ビルド スクリプトから設定できるもの) のすべての読み取りを、少なくとも構成フェーズが終了するまで延期する必要があります。この目標を達成するには、いくつかの方法があります。その中には次のものがあります。

  • クロージャーを値として受け入れる Gradle API を使用する (例: Copy.from)
  • project.afterEvaluate {}またはのようなコールバックの使用gradle.projectsEvaluated {}
  • コンベンション マッピング メカニズムの使用 (これは公開機能とは見なされないことに注意してください)

目の前の仕事に最適なオプションを選択するには、ある程度の専門知識が必要です。( Gradle コードベースのプラグインのいくつかを調べると役立つ場合があります。) あなたの場合、次のことを行う可能性があります。

project.task("abcTask", type: Copy) {
    from { project.abc.fromPath }
    into { project.abc.intoPath }
}

タスクの構成が遅すぎる<<ため、このバージョンは機能しません。Copy一般的に言えば、すべての構成は、実行フェーズではなく、構成フェーズで行う必要があります。Gradle ビルド フェーズの詳細については、Gradle ユーザー ガイドを参照してください。

于 2013-04-26T11:33:27.210 に答える