
こんにちは。 エキサイト株式会社の三浦です。
今回は、Javaで用いられる依存・タスク管理ファイルである build.gradle の位置が、サブプロジェクトと関連しているということについて説明していきます。
build.gradleは分けて使える
Java、特にSpring Bootを使っている人であれば、 build.gradle ファイルは馴染み深いものかもしれません。
この build.gradle ファイルですが、実は分割して使用することができます。
まずは、プロジェクトをサブプロジェクトとして分割します。
Gradle では setting.gradleというファイルでサブプロジェクトを作成することができます。
include ':sample1' include ':sample2'
続いて、以下のようなパッケージ構造を作ります。
. ├── sample1 │ └── build.gradle ├── sample2 │ └── build.gradle ├── setting.gradle └── build.gradle
各 build.gradle ファイルは以下のようにしてみます。
ルートプロジェクトのbuild.gradle
subprojects {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
}
}
sample1サブプロジェクトのbuild.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
sample2サブプロジェクトのbuild.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
このようにすることで、
- ルートプロジェクトの
build.gradleにより、すべてのサブプロジェクトにspring-boot-starterがインストールされる - sample1の
build.gradleにより、sample1サブプロジェクトにのみspring-boot-starter-webがインストールされる - sample2の
build.gradleにより、sample2サブプロジェクトにのみspring-boot-starter-securityがインストールされる
とすることが可能です。
ここで注意するべき点は、ルートプロジェクトでは subprojects を指定した後に dependencies ブロックを作っていましたが、各サブプロジェクトでは直接 dependencies ブロックから始まっている点です。
サブプロジェクトのパッケージに位置した時点で、その build.gradle ファイルは暗黙的に「そのサブプロジェクトがルートプロジェクトであるかのように挙動する」ようになります。
そのことを念頭に置いて適切な依存解決等を行ってください。
最後に
今回は、 build.gradle が配置される位置により、自動的に該当するサブプロジェクトの設定として使用されるという説明をしました。
単に分割できるというだけではないので、「設定したはずなのに使えない」となってしまわないよう、適切な配置・設定をするようにしましょう。