【Maven】dependencyのバージョンをSpring系の内部バージョンに合わせる【SpringBoot】


TL;DR

  • ${ユーザー}/.m2/repository/org/springframework/boot/spring-boot-dependencies/${Springのバージョン}.RELEASE/spring-boot-dependencies-${Springのバージョン}.RELEASE.pomに定義されているpropertiesはプロジェクトのpomからも参照できる
    • (正確には、このようなpomに書かれているpropertiesにアクセスできる)
  • このpropertiesを元にバージョンを設定することで、dependencyのバージョンをSpringBootのバージョンに合わせることができる
    • アップデートが楽になる
    • ライブラリの相性問題が発生しにくくなる

やること

spring-boot-starter系の依存にモジュールを加える場合などで、手動でspring-boot-starter内の依存に合わせてバージョンを管理するのは手間になったりします。
どうせなら色々なライブラリのバージョンがSpringのバージョンに合わせて管理されている方が諸々楽なので、そのやり方を書きます。

やり方

${ユーザー}/.m2/repository/org/springframework/boot/spring-boot-dependencies/${Springのバージョン}.RELEASE/spring-boot-dependencies-${Springのバージョン}.RELEASE.pom内のpropertiesの情報を用いることでできます。

spring-boot-dependencies-2.2.6.RELEASE.pomから抜粋
  ...
  <properties>
    <activemq.version>5.15.12</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <appengine-sdk.version>1.9.79</appengine-sdk.version>
    <artemis.version>2.10.1</artemis.version>
    <aspectj.version>1.9.5</aspectj.version>
    <assertj.version>3.13.2</assertj.version>
    ...

Jacksonの例

Jacksonを例にやってみます。
spring-boot-dependencies-2.2.6.RELEASE.pomではjackson.versionとして以下のように定義されています。

spring-boot-dependencies-2.2.6.RELEASE.pomから抜粋
    <jackson.version>2.10.3</jackson.version>
    <jackson-bom.version>${jackson.version}</jackson-bom.version>

これをプロジェクトのpomで導入すると以下のように書けます。
${jackson.version}として変数を参照しています。

pom.xml
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-json -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin -->
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-kotlin</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-csv -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-csv</artifactId>
            <version>${jackson.version}</version>
        </dependency>

ideaの場合

Intellij ideaの場合、変数に対する補完が効き、定義に飛ぶこともできます。
これによって効率的に目的の変数を探すことができるでしょう。