Gradleでマルチプロジェクト

  • 62
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

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'