Gradle 5.2 系の BOM サポート

f:id:Naotsugu:20190910224333p:plain

Spring Boot を例に。


Gradle 5.2 から BOM インポートが正式にサポートされました。

implementation platform を使い以下のように書けます。

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.1.8.RELEASE'
}

sourceCompatibility = targetCompatibility = 1.8

repositories {
    jcenter()
}

dependencies {
    // import a BOM
    implementation platform('org.springframework.boot:spring-boot-dependencies:2.1.8.RELEASE')

    // define dependencies without versions
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

implementation enforcedPlatform とすると build.gradle 内で明示的にバージョン指定した依存も強制的に上書きするようになります。

普段は implementation platform としておけば良いと思います。


公式ドキュメントは以下になります。

docs.gradle.org


Gradle 4.6 〜 5.1.1 の場合

docs.gradle.org

Gradle 4.6 では、BOM import は Feature Preview なので settings.gradle に以下を書くことで BOM サポートが有効になります。

enableFeaturePreview('IMPROVED_POM_SUPPORT')

そして、build.gradle は以下のような書き方になります。

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.1.8.RELEASE'
}

sourceCompatibility = targetCompatibility = 1.8

repositories {
    jcenter()
}

dependencies {
    // import a BOM
    implementation 'org.springframework.boot:spring-boot-dependencies:2.1.8.RELEASE'

    // define dependencies without versions
    implementation 'org.springframework.boot:spring-boot-starter-web'
}


それ以外のレガシーな場合

  • Spring Boot プラグインは 1.X では dependency-management を含んでいたが、2.X では外れたため個別でプラグイン指定が必要
  • Gradle の plugins DSL は 2.10 ぐらいから使えるようになった
  • Gradle 3.4 からは依存で compileruntime が非推奨となり代わりに implementationapi が推奨となった

など、色々あって面倒なので、もう以下でよいかと。。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.6.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' // Spring Boot 1.X では不要

sourceCompatibility = targetCompatibility = 1.8

repositories {
    jcenter()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
}