概要
Gradle利用時に、独自のbomを生成したり、生成したbomを利用する方法をまとめます。
ここではBOMのpublish先としてlocal repositoryを使用します。
動作環境
- Gradle : 7.0.2
1. BOMを生成する
BOMをlocal repositoryにあげるための最低限のbuild.gradleがこちらです
build.gradle
plugins {
id 'java-platform' // BOM生成に必要なプラグイン
id 'maven-publish' // maven publishに必要なプラグイン
}
group = 'rhirabay'
version = '0.0.1'
// 利用アプリケーションにデフォルトで依存を追加するために必要
// ※使用しないライブラリも依存に追加されてしまうので、注意
// javaPlatform {
// allowDependencies()
// }
repositories {
mavenCentral()
}
dependencies {
// constraintsでくくることで、ライブラリとバージョンの組み合わせを制約として定義できる
constraints {
api 'org.projectlombok:lombok:1.18.20'
}
}
// mavenにuploadする設定
publishing {
publications {
mavenJava(MavenPublication) {
artifactId = 'my-bom'
from components.javaPlatform
}
}
}
以下のコマンドでlocal repositoryにuploadする
./gradlew publishToMavenLocal
2. BOMを利用する
build.gradle
dependencies {
// BOMは「platform」でくくる
implementation platform('rhirabay:my-bom:+')
// BOMに定義してあるライブラリはバージョンを記載しなくて良い
// バージョンを記載すると記載されたバージョンが優先される
compileOnly('org.projectlombok:lombok')
}
rhirabay:my-bom:+
のように最新のバージョンを使用するようにしておけば、
buildし直すだけでBOMの更新を反映することができます!
0.0.+
のようにmajar / minor バージョンまでを指定しておいた方が安全な気がします
なぜBOMが必要なの?
扱っているリポジトリ(アプリケーション)が1つの場合はBOM管理をしたところで管理するものが増えるだけ。。
なので大前提として複数のリポジトリがあるものとします。
複数のリポジトリがあると
- 脆弱性対応
- ライブラリのEOL
などによって一括でバージョンを更新しなければならない場面があります。
そんな時BOM管理をしていれば
BOMでライブラリのバージョン更新すれば、アプリケーションはbuildし直すだけで良くなります!