こんにちは。 エキサイト株式会社の三浦です。
今回は、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
が配置される位置により、自動的に該当するサブプロジェクトの設定として使用されるという説明をしました。
単に分割できるというだけではないので、「設定したはずなのに使えない」となってしまわないよう、適切な配置・設定をするようにしましょう。