2017-07-11 2 views
0

私はマルチプロジェクト対応の設定プラグインを持っています。現在、settings.gradleで特定されているすべてのプロジェクトに適用されます。しかし、各サブプロジェクトは同じ設定をしていないので、これは問題です。コマンドラインで設定したプロジェクトプロパティを使用してプラグインの動作を制御します(-P)。gradleで呼び出されたプロジェクトのリストを確認

問題は、このプロパティを使用するのに必要な設定がないプロジェクトで失敗し、コマンドラインから特定のサブプロジェクトにプロパティを適用する方法がわかっていることです。

settings.gradle.allprojectsを反復するのではなく、ビルドの一部として実際にどのプロジェクトが含まれているかを知る方法はありますか?例えば、私が行うとき:

gradle :subproject-name:build :other-subproject-name:build -PsomeProperty

私はプロジェクトのみに設定プラグインを適用することができるようにだけsubproject-nameother-subproject-nameが呼び出されたことを知っていただきたいと思います。

または、プロジェクトのプロパティを特定のプロジェクトのみに「スコープ」する方法はありますか?

答えて

0

...ビルドの一部として実際にどのプロジェクトが含まれているかを知る方法はありますか?

これは誤解です。 settings.gradleが含まれている場合は、すべてのプロジェクトがビルドの一部です。すべてのプロジェクトは、Projectに関連付けられて構成されます。

あなたが最終的に探しているのは、実行するタスクがあれば、そのタスクを所有しているサブプロジェクトは何ですか?これを行うには、Gradleのタスクグラフを取得し、実行されるすべてのタスクについて、各タスクを所有するプロジェクトを見つけます。

gradle.taskGraph.whenReady { graph -> 
    def projects = graph.allTasks.collect { it.project }.toSet() 
    projects.each { 
     println "Project is being used in this build: " + it 
    } 
} 
+0

私は恐れていました。残念ながら、私が持っているプラ​​グインはバージョニングプラグインなので、それまでにプロジェクトのバージョンを構成する必要があります。私は、プロジェクトプロパティを特定のプロジェクトにのみ適用するように指定する方法があることを願っています。 –

+0

@VivinPaliath私は、プロジェクトを構成する前にプロジェクトバージョンを設定する必要がある理由について100%明確ではありません。最終的には、あなたのアプローチを再考したいかもしれません。プラグインを適用しようとしている初期化フェーズでは、ビルドに関する情報が非常に限られています。 'project.version'は設定段階で設定することができ、より多くの情報を利用できます。あなたのタスクは、それらを定義していると仮定して、実行時に 'project.version'の値を読み取るように設定することができます。 – nickb

+0

遅延の問題が発生し始めます。 jarプラグインとmaven-publishプラグインは良い例です。私のプラグインは、gitタグに基づいてバージョンを設定し、バージョン管理を制御する特定のプロパティを渡します。私は、メジャー、マイナー、パッチ、またはリリース前にバンプする。タスクが準備完了するのを待っていると、プロジェクトバージョンを使用するタスクは正しいバージョンを取得せず、その後、 'afterEvaluate'でタスクを再構成する必要があります。設定時にバージョンを設定するタスクを認識する必要があるため、ユーザーの負担が増えます。 –

関連する問題