【Spring Boot編】Gradleのバージョンカタログを使用してプロジェクト間の依存関係を一括管理していく
Gradleのバージョンカタログを使用してプロジェクト間の依存関係を一括管理する方法を紹介します
例で以下の独立したプロジェクトを用意します
(「version-catalog」でバージョンを一元管理します)
- version-catalog
- projectA
- projectB
- projectC
version-catalogプロジェクトで projectB と projectC のバージョンを管理し、 projectA がそれらを参照するように設定する方法を示します
構成はこんなイメージです。
projects/
├── version-catalog/
│ ├── build.gradle
│ ├── settings.gradle
│ └── gradle/
│ └── libs.versions.toml
├── projectA/
│ ├── build.gradle
│ ├── settings.gradle
│ └── src/main/java/com/example/projectA/Application.java
├── projectB/
│ ├── build.gradle
│ ├── settings.gradle
│ └── src/main/java/com/example/projectB/Application.java
└── projectC/
├── build.gradle
├── settings.gradle
└── src/main/java/com/example/projectC/Application.java
順番に見ていきましょう
1. version-catalogプロジェクトの実装
settings.gradle
version-catalogプロジェクトのsettings.gradleでlibs.versions.toml を参照します
# version-catalog/settings.gradle
rootProject.name = 'version-catalog'
build.gradle
version-catalogプロジェクトのbuild.gradleでバージョンカタログを設定します
(当プロジェクト自体もバージョン管理)
# version-catalog/build.gradle
plugins {
id 'java'
}
group = 'com.example'
version = '1.0.0'
dependencyResolutionManagement {
versionCatalogs {
libs {
from(files("gradle/libs.versions.toml"))
}
}
}
gradle/libs.versions.toml
libs.versions.tomlで依存関係のバージョンを定義します
# version-catalog/gradle/libs.versions.toml
[versions]
springBoot = "2.5.4"
java = "11"
projectB = "1.0.0"
projectC = "1.0.0"
[libraries]
springBootStarterWeb = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "springBoot" }
springBootStarterTest = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "springBoot" }
projectB = { module = "com.example:projectB", version.ref = "projectB" }
projectC = { module = "com.example:projectC", version.ref = "projectC" }
2. projectBプロジェクトの実装
settings.gradle
# projectB/settings.gradle
rootProject.name = 'projectB'
build.gradle
projectBプロジェクトのbuild.gradleでプロジェクトのバージョンを設定します
# projectB/build.gradle
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
}
group = 'com.example'
version = '1.0.0'
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
3. projectCプロジェクトの実装
settings.gradle
# projectB/settings.gradle
rootProject.name = 'projectC'
build.gradle
projectCプロジェクトのbuild.gradleでプロジェクトのバージョンを設定します
# projectC/build.gradle
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
}
group = 'com.example'
version = '1.0.0'
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
4. projectAプロジェクトの実装
settings.gradle
project〇プロジェクトのsettings.gradleでversion-catalog プロジェクトのバージョンカタログを参照します
# project〇/settings.gradle
rootProject.name = 'projectA'
dependencyResolutionManagement {
versionCatalogs {
libs {
from(files("../version-catalog/gradle/libs.versions.toml"))
}
}
}
build.gradle
project〇プロジェクトのbuild.gradleで依存関係を設定します
# projectA/build.gradle
plugins {
id 'org.springframework.boot' version libs.versions.springBoot
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
repositories {
mavenCentral()
maven {
url = uri("../projectB/build/libs")
}
maven {
url = uri("../projectC/build/libs")
}
}
dependencies {
implementation libs.projectB
implementation libs.projectC
implementation libs.springBootStarterWeb
testImplementation libs.springBootStarterTest
}
tasks.named('test') {
useJUnitPlatform()
}
version-catalogプロジェクトでprojectBとprojectC のバージョンを管理し、 projectAがそれらのバージョンを参照するようにできます
各プロジェクトは独立したGradleプロジェクトとして構成され、projectA は version-catalog プロジェクトのバージョンカタログを使用して projectB と projectC の依存関係を管理します
是非フォローしてください
最新の情報をお伝えします