Edited at

Gradleでマルチプロジェクト

More than 5 years have passed since last update.

Gradleは単一プロジェクトだけではなく複数のプロジェクトをまとめて扱うことができて、マルチプロジェクトと呼んでいます。

マルチプロジェクトではいくつかのレイアウトがあるので、以下の3つのプロジェクトを例に書いてみます。



  • root プロジェクトをまとめるためのプロジェクト


  • share 共通機能をまとめたプロジェクト


  • application アプリケーションがあるプロジェクトでshareプロジェクトに依存しています。

build.gradleの書き方はGradle User Guide/7.3. マルチプロジェクトのJavaビルドなどが詳しいため、ここでは割愛します。


階層構造のレイアウト

root配下にshareapplicationを配置する見た目で分かりやすいレイアウトです。

Gradleのビルドファイルであるbuild.gradlesettings.gradleroot直下に配置します。


Hierarchical-Layout

root/

share/
application/
build.gradle
settings.gradle

settings.gradleにはincludeに続けてプロジェクト名を書きます。


settings.gradle

include 'share', 'application'



フラットなレイアウト

Eclipseなどで扱いやすいように全てのプロジェクトを同じ階層に配置するレイアウトです。

build.gradlesettings.gradleはそのままで、shareapplicationrootと同じ階層にあります。

ただし、このレイアウトではroot以外でビルドできません。


Flat-Layout

root/

build.gradle
settings.gradle
share/
application/

settings.gradleincludeincludeFlatに変更するだけです。


settings.gradle

includeFlat 'share', 'application'



masterを使ったフラットなレイアウト

※追記

フラットなレイアウトの特別パターンで、rootディレクトリの名前をmasterにすれば他のプロジェクトからビルドできます。

この場合は同じ階層のmasterディレクトリの中にsettings.gradleがあればマルチプロジェクトとして扱われるようです。

参考: Gradle User Guide/第53章 ビルドのライフサイクル/53.4. 初期化


Flat-Layout(master)

master/

build.gradle
settings.gradle
share/
application/


もう1つのフラットなレイアウト

フラットなレイアウトでも各プロジェクトでビルドできるように配置したものです。

最初のフラットなレイアウトから更にsettings.gradleを各プロジェクトと同じ階層に配置します。


Another-Flat-Layout

root/

build.gradle
share/
application/
settings.gradle

settings.gradleでルートプロジェクトの名前とディレクトリを設定します。

Gradleはカレントディレクトリにsettings.gradleが無い場合は上位のディレクトリを順に探してくれるので、どのプロジェクトからでもビルドできるようになります。


settings.gradle

rootProject.name = 'root'

rootProject.projectDir = new File(settingsDir, 'root')

includeFlat 'share', 'application'