Gradleは単一プロジェクトだけではなく複数のプロジェクトをまとめて扱うことができて、マルチプロジェクトと呼んでいます。
マルチプロジェクトではいくつかのレイアウトがあるので、以下の3つのプロジェクトを例に書いてみます。
-
rootプロジェクトをまとめるためのプロジェクト -
share共通機能をまとめたプロジェクト -
applicationアプリケーションがあるプロジェクトでshareプロジェクトに依存しています。
build.gradleの書き方はGradle User Guide/7.3. マルチプロジェクトのJavaビルドなどが詳しいため、ここでは割愛します。
階層構造のレイアウト
root配下にshareとapplicationを配置する見た目で分かりやすいレイアウトです。
Gradleのビルドファイルであるbuild.gradleとsettings.gradleはroot直下に配置します。
root/
share/
application/
build.gradle
settings.gradle
settings.gradleにはincludeに続けてプロジェクト名を書きます。
include 'share', 'application'
フラットなレイアウト
Eclipseなどで扱いやすいように全てのプロジェクトを同じ階層に配置するレイアウトです。
build.gradleとsettings.gradleはそのままで、shareとapplicationがrootと同じ階層にあります。
ただし、このレイアウトではroot以外でビルドできません。
root/
build.gradle
settings.gradle
share/
application/
settings.gradleはincludeをincludeFlatに変更するだけです。
includeFlat 'share', 'application'
masterを使ったフラットなレイアウト
※追記
フラットなレイアウトの特別パターンで、rootディレクトリの名前をmasterにすれば他のプロジェクトからビルドできます。
この場合は同じ階層のmasterディレクトリの中にsettings.gradleがあればマルチプロジェクトとして扱われるようです。
参考: Gradle User Guide/第53章 ビルドのライフサイクル/53.4. 初期化
master/
build.gradle
settings.gradle
share/
application/
もう1つのフラットなレイアウト
フラットなレイアウトでも各プロジェクトでビルドできるように配置したものです。
最初のフラットなレイアウトから更にsettings.gradleを各プロジェクトと同じ階層に配置します。
root/
build.gradle
share/
application/
settings.gradle
settings.gradleでルートプロジェクトの名前とディレクトリを設定します。
Gradleはカレントディレクトリにsettings.gradleが無い場合は上位のディレクトリを順に探してくれるので、どのプロジェクトからでもビルドできるようになります。
rootProject.name = 'root'
rootProject.projectDir = new File(settingsDir, 'root')
includeFlat 'share', 'application'