【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 の依存関係を管理します

是非フォローしてください

最新の情報をお伝えします