1. 序章

Spring Bootは、新しいプロジェクトをすばやく開始するための優れたフレームワークです。 開発者が新しいアプリケーションをすばやく作成するのに役立つ方法の1つは、ほとんどのユーザーに適した一連の依存関係を定義することです。

ただし、場合によっては、1つ以上の依存関係バージョンをオーバーライドする必要があります。

このチュートリアルでは、Spring Bootが管理する依存関係とそのバージョンをオーバーライドする方法を見ていきます。

2. スプリングブート部品表(BOM)

Spring Bootが依存関係を管理する方法を見てみましょう。 つまり、Spring Bootは部品表(BOM)を使用して依存関係とバージョンを定義します。

ほとんどのSpringBootプロジェクトは、 spring-boot-starter-parentアーティファクトを継承し、それ自体はspring-boot-dependenciesアーティファクトを継承します。 この後者のアーティファクトはSpringBootBOM であり、これは大きなdependentencyManagementセクションを持つ単なるMavenPOMファイルです。

<dependencyManagement>
    <dependencies>
        <dependency>
            ...
        </dependency>
        <dependency>
            ...
        </dependency>
    </dependencies>
</dependencyManagement>

MavenのdependencyManagementを使用することにより、 BOMは、アプリケーションがデフォルトのライブラリバージョンを使用することを選択した場合にそれらを指定できます。 例を見てみましょう。

SpringBootBOMのエントリの1つは次のとおりです。

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-amqp</artifactId>
    <version>${activemq.version}</version>
</dependency>

これは、ActiveMQに依存するプロジェクト内のアーティファクトがデフォルトでこのバージョンを取得することを意味します。

また、バージョンはプロパティプレースホルダーを使用して指定されていることに注意してください。 これはSpringBootBOMの一般的な方法であり、このプロパティと他のプロパティの値を独自のプロパティセクション内に提供します。

3. SpringBoot管理の依存関係バージョンのオーバーライド

Spring Bootが依存関係のバージョンを管理する方法を理解したので、それらをオーバーライドできることを見てみましょう。

3.1. Maven

Mavenの場合、SpringBootで管理された依存関係をオーバーライドするための2つのオプションがあります。 まず、Spring Boot BOMがプロパティプレースホルダーを使用してバージョンを指定する依存関係の場合、プロジェクトPOMでそのプロパティを設定する必要があります。

<properties>
    <activemq.version>5.16.3</activemq.version>
</properties>

これにより、 activemq.version プロパティを使用する依存関係では、SpringBootBOMのバージョンではなく指定されたバージョンが使用されます。

さらに、バージョンがプレースホルダーとしてではなく、BOMのdependentency タグ内で明示的に指定されている場合、プロジェクトの依存関係エントリでversionを明示的にオーバーライドできます。

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-amqp</artifactId>
    <version>5.16.3</version>
</dependency>

3.2. Gradle

Gradleには、Spring BootBOMからの依存関係管理を尊重するプラグインが必要です。 したがって、開始するには、プラグインを含めてBOMをインポートする必要があります。

apply plugin: "io.spring.dependency-management"
dependencyManagement {
  imports {
    mavenBom 'io.spring.platform:platform-bom:2.5.5'
  }
}

ここで、依存関係の特定のバージョンをオーバーライドする場合は、BOMから対応するプロパティをGradle extプロパティとして指定する必要があります。

ext['activemq.version'] = '5.16.3'

また、BOMにオーバーライドするプロパティがない場合は、依存関係を宣言するときにいつでもバージョンを直接指定できます。

compile 'org.apache.activemq:activemq-amqp:5.16.3'

3.3. 警告

ここで言及する価値のあるいくつかの警告。

手始めに、Spring Bootは、BOMで指定されたライブラリバージョンを使用して構築およびテストされていることを覚えておくことが重要です。 別のライブラリバージョンを指定するときはいつでも、非互換性が生じるリスクがあります。したがって、標準の依存関係バージョンから逸脱するときはいつでも、アプリケーションをテストすることが不可欠です。

また、これらのヒントは、Spring Boot Bill of Materials(BOM)を使用する場合にのみ適用されることに注意してください。 Mavenの場合、これはSpringBootの親を使用することを意味します。 そしてGradleの場合、これはSpring依存関係プラグインを使用することを意味します。

4. 依存関係バージョンの検索

Spring Bootが依存関係のバージョンを管理する方法と、それらをオーバーライドする方法を見てきました。 このセクションでは、プロジェクトで使用しているライブラリのバージョンを見つける方法を見ていきます。 これは、ライブラリのバージョンを識別し、プロジェクトに適用するオーバーライドが尊重されていることを確認するのに役立ちます。 

4.1. Maven

Mavenは、すべての依存関係とそのバージョンのリストを表示するために使用できるゴールを提供します。 たとえば、次のコマンドを実行すると、次のようになります。

mvn dependency:tree

次のような出力が表示されます。

[INFO] com.baeldung:dependency-demo:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.5.7-SNAPSHOT:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.5.7-SNAPSHOT:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.5.7-SNAPSHOT:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.5.7-SNAPSHOT:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.5.7-SNAPSHOT:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.6:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.2.6:compile

出力には、プロジェクトの依存関係であるすべてのアーティファクトとバージョンが表示されます。 これらの依存関係はツリー構造で表示されるため、すべてのアーティファクトがプロジェクトにインポートされる方法を簡単に識別できます。

上記の例では、 logback-classic アーティファクトは、 spring-boot-starter-logging ライブラリの依存関係であり、それ自体はspring-boot-の依存関係です。 starterモジュール。 したがって、ツリーを上に移動して最上位のプロジェクトに戻ることができます。

4.2. Gradle

Gradleは、同様の依存関係ツリーを生成するタスクを提供します。 たとえば、次のコマンドを実行すると、次のようになります。

gradle dependencies

次のような出力が得られます。

compileClasspath - Compile classpath for source set 'main'.
\--- org.springframework.boot:spring-boot-starter-web -> 1.3.8.RELEASE
     +--- org.springframework.boot:spring-boot-starter:1.3.8.RELEASE
     |    +--- org.springframework.boot:spring-boot:1.3.8.RELEASE
     |    |    +--- org.springframework:spring-core:4.2.8.RELEASE
     |    |    \--- org.springframework:spring-context:4.2.8.RELEASE
     |    |         +--- org.springframework:spring-aop:4.2.8.RELEASE

Mavenの出力と同様に、使用されているバージョンとともに、各アーティファクトがプロジェクトに取り込まれている理由を簡単に特定できます。

5. 結論

この記事では、SpringBootが依存関係のバージョンを管理する方法を学びました。 また、MavenとGradleの両方でこれらの依存関係バージョンをオーバーライドする方法も確認しました。 最後に、両方のプロジェクトタイプで依存関係のバージョンを確認する方法を確認しました。