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'