LoginSignup
2
2

More than 5 years have passed since last update.

SpringBoot の依存ライブラリのバージョンをカスタマイズ(Maven版)

Posted at

SpringBoot の Maven プロジェクトのpom.xmlでは、依存ライブラリのバージョン指定を大抵の場合省略できます。後述の spring-boot-dependencies の中に、SpringBootがサポートしている各種ライブラリのバージョン定義がされており、それを参照するからです。

ここで以前から気になっていたのが、例えば SpringBoot で Tomcat を使用していて、Tomcat側で緊急のセキュリティfixがリリースされた場合、どうやってTomcatのバージョンだけを個別にアップデートするか?という方法でした。本記事ではそれについて実際のサンプルコードで確認してみました。

サンプルコードは以下になります。

サンプルコードの解説

STS4で生成した SpringBoot 2.1.1 の単純なMavenプロジェクトです。コンテナはデフォルトのTomcatで、h2databaseも追加しています。

リポジトリのpom.xmlは、すでにバージョンをカスタマイズした内容になっています。以下のように <properties> 内で、spring-boot-dependencies 側で定義しているtomcatとh2のバージョンを上書きしています。

    <properties>
        <java.version>1.8</java.version>
        <tomcat.version>9.0.14</tomcat.version>
        <h2.version>1.4.196</h2.version>
    </properties>

まずはこれを、以下のように生成した当時の状態に戻し、ビルド・実行してみます。

    <properties>
        <java.version>1.8</java.version>
    </properties>

mvnw package でビルドしたら java -jar (jarファイル) で実行し、http://localhost:18088/ にアクセスしてください。以下のようなバージョン情報が表示されます。(これは2019-01-02前後の時点のものです)

servletContext.getServerInfo() -> Apache Tomcat/9.0.13
SELECT H2VERSION() -> 1.4.197

これが、spring-boot-dependencies側で事前に埋め込まれたバージョンになります。
これをカスタマイズしてみます。Tomcatについては 9.0.14 がリリースされていましたのでそちらに変更し、h2databaseについては1つバージョンを落として 1.4.196 に変更してみます。

→ 変更結果が、リポジトリのpom.xmlの内容となります。ビルドしなおして実行すると、確かに変更したバージョンが表示されることを確認できるはずです。

spring-boot-dependencies について

STS4が生成したpom.xmlでは、parentにspring-boot-starter-parent:2.1.1.RELEASEが設定されています。この pom.xml を見てみると、依存関係をまとめた spring-boot-dependencies:2.1.1.RELEASE が更にparentとして指定されています。
spring-boot-dependencies の pom.xml を見てみると、 <properties> に各種ライブラリのバージョンが登録されていました。

<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.1.1.RELEASE</version>
    <packaging>pom</packaging>
    <name>Spring Boot Dependencies</name>
    <description>Spring Boot Dependencies</description>
    <url>https://projects.spring.io/spring-boot/#</url>
<!-- ... -->
    <properties>
<!-- ... -->
        <h2.version>1.4.197</h2.version>
<!-- ... -->
        <tomcat.version>9.0.13</tomcat.version>

これらの定義は、spring-boot-starter-系のpom.xmlで、個別のライブラリの依存関係での <version> 指定で参照されています。
これにより、アプリケーション側のpom.xmlでは <version> 指定が不要となっています。また、spring-boot-dependencies側では SpringBoot として動作確認が取れているバージョン番号を定義しているわけですので、一貫性が期待できます。「あれ、こっちはこのバージョンで良いんだっけ?」と悩む必要がありません。

もし異なるバージョンを使いたい場合は、アプリ側の pom.xml で同じプロパティを上書きすればOKです。公式リファレンス側での解説は以下を参照してください。

まとめ

  • SpringBoot の依存ライブラリのバージョンをカスタマイズするには、 spring-boot-dependencies 側で定義されているバージョンのプロパティをアプリ側のpom.xmlで上書きすればOK.
  • ↑実際にサンプルコードで確認してみた。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2