Spring IO platform のススメ
個人的にすごく重宝しているけど、使っているプロジェクトをあまり見たことが無いので書いておこうかと思います。
Spring IO platform のイイトコロ
ライブラリ毎のバージョンに迷わない
ってかメジャーどころのライブラリならバージョン指定しなくて大丈夫です。
ライブラリのバージョンアップが楽
Spring IO platform自体のバージョンを上げてしまうというのが一番手っ取り早いです。
こまめに上げておけば、Springやちゃんとしたライブラリなら互換性が無くなる前にdeprecatedで知らせてくれます。
警告が出た箇所で該当のJavadocを参照して、その通りに修正すれば良いのです。
ですが、バージョンアップ対象のライブラリのリリースノートやコミットログくらいは簡単に追っておきたいところです。
個別にバージョン上げたい場合は後述します。
組み合わせがテストされているという安心感
とは言っても、自分のプロジェクトでテストしているわけではないので、常日頃テストコードは書いておきましょう。
バージョンを上げても殆どバグは出ないですが、あっても必ず単体テストで見つかりました。
実際にやってみる
まずはこれまた重宝しているSPRING INITIALIZRのサイトにアクセスします。
で、適当に埋めていきます。
自分はだいたいいつもこんな感じです。
そしてGenerate Project
!
ダウンロードされたZIPファイルを展開します。
$ unzip demo-spring-io-platform.zip
$ cd demo-spring-io-platform
展開したらpom.xmlを修正します。
ここです!ここ大事です!
Spring IO platformのトップページには
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
と書かれているのですが、リファレンス見るとオススメはこっちだと書かれているのです。
<parent>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR5</version>
<relativePath/>
</parent>
えっ?そんなことしたらspring-boot-starter-parent
を親に指定できないじゃんって思った方。安心してください。
spring-boot-starter-parent
はおじいちゃんになってもらいます。
platform-bom
の親pomはspring-boot-starter-parent
になっているのです。
なので、心配は要りません。
dependencyManagement
として設定するのと何が違うって、platform-bom
が提供する各ライブラリの変更が簡単にできる点です。
例えばguava
を追加してみます。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
バージョンは指定しません。platform-bom
が提供してくれています。
この時点で20.0
が適用されます。
「あぁ、guavaだけ最新版に上げたい〜」となった時にguava
なのである程度テストは必要になりますが、こんな形でできます。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
+ <guava.version>23.0</guava.version>
</properties>
dependency
の方にバージョン変数を設定しなくてOKです。platform-bom
でやってくれています。
dependencyManagement
にplatoform-bom
を設定していると、プロパティのバージョンが反映されません。
じゃあ、次は絶対にバージョンを上げるassertj
です。
assertj
はspring-boot-parent
で2.x系のバージョンが指定されています。
Java8対応は3.x系なので、思い切ってバージョンを最新にします。依存度も少ないからこれは安心して上げられます。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<guava.version>23.0</guava.version>
+ <assertj.version>3.8.0</assertj.version>
</properties>
これだけです。既にimportされているライブラリなのでプロパティでバージョン指定だけすればOKです。
まとめ
長く運用していると細かな調整は入ると思いますが、それでもバージョン関係で悩むことは他のチームに比べて殆ど無かったと思います。
良ければ皆さんも是非!