3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Gradle】bomを生成する/利用する

Last updated at Posted at 2021-09-18

概要

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し直すだけで良くなります!

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?