この記事について
Gradleをより理解するために公式ドキュメントを読んでメモ代わりとして私なりに訳していきます。
読んでいるドキュメントのバージョンは7.3.3です。
この記事で訳している章はAuthoring Gradle Builds>Structuring Individual Builds>Fine Tuning the Project LayoutFine Tuning the Project Layoutとなります。
必要な章から読んでいるため、一連の記事は公式ドキュメントの章立て通りの順にはなっていません。
Structuring Individual Builds>Fine Tuning the Project Layout
マルチプロジェクトビルドは、Gradleの1回の実行で複数のプロジェクトをビルドすることです。マルチプロジェクトビルドに参加するプロジェクトは設定ファイルに宣言する必要があります。
Project locations
マルチプロジェクトビルとは常に単一のルートからのツリー構造で表されます。ツリーの各要素がそれぞれのプロジェクトを表現します。プロジェクトはマルチプロジェクトビルドツリー内の位置を表すプロジェクトパスを持ちます。ほとんどの場合、プロジェクトパスはファイルシステム上の物理的な位置と一致します。しかし、この挙動は構成可能です。プロジェクトツリーはsettings.gradleファイルによって作成されます。設定ファイルの場所はルートプロジェクトの位置でもあります。
Building the tree
設定ファイルではincludeメソッドを使ってプロジェクトツリーを構築できます。
プロジェクトレイアウトの例
include 'project1', 'project2:child', 'project3:child1'
includeメソッドはプロジェクトパスを引数に取ります。プロジェクトパスは物理ファイルシステムのパスと等しいと仮定されます。たとえば、services:apiというパスは既定ではservice/apiというフォルダ(プロジェクトからの相対位置)にマップされます。ツリーからの葉のみを指定するだけです。これはservices:hotels:apiというパスを含めると、services,sevices:hotels,'services:hotels:api'の3つのプロジェクトを作成することになります。プロジェクトパスの作業法に関する他の例はDLSドキュメントのSettings.include(java.lang.String[])を参照してください。
Modifying elements of the project tree
設定ファイルから作成されたマルチプロジェクトツリーはいわゆるproject descriptotsで構成されています。設定ファイルにあるこれらの記述子はいつでも変更することができます。記述子にアクセスは下記のように行います。
プロジェクトツリー内の要素を走査する
include('project-a')
println rootProject.name
println project(':project-a').name
記述子を利用すると、名前やプロジェクトのディレクトリ、プロジェクトのビルドファイルを変更することができます。
プロジェクトツリー内の要素の変更
rootProject.name = 'main'
include('project-a')
project(':project-a').projectDir = file('my-project-a')
project(':project-a').buildFileName = 'project-a.gradle'
より詳しい情報はAPIドキュメントのProjectDescriptorクラスを参照してください。