Managing Transitive Dependenciesあたりをお試ししてみました。
implementation platformを使ってみる
build.gradle
BOMをimplementation platformに指定します。
BOMで定義されているバージョンを使用するので、個別のライブラリ(この例ではjackson-databind)にはバージョン指定は不要となります。
dependencies { implementation platform('com.fasterxml.jackson:jackson-bom:2.9.7') implementation 'com.fasterxml.jackson.core:jackson-databind' }
dependenciesの結果
バージョンを指定しなくても、BOMのバージョンが適用されていますね
+--- com.fasterxml.jackson:jackson-bom:2.9.7 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | +--- com.fasterxml.jackson.core:jackson-core:2.9.7 | \--- com.fasterxml.jackson.core:jackson-databind:2.9.7 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | \--- com.fasterxml.jackson.core:jackson-core:2.9.7 \--- com.fasterxml.jackson.core:jackson-databind -> 2.9.7 (*)
個別のライブラリに明示的にバージョンを指定してみると
明示的に新しいバージョンを指定してみます。
dependencies { implementation platform('com.fasterxml.jackson:jackson-bom:2.9.7') implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8' }
dependenciesを見てみると、明示的に指定したバージョンが適用されています。
このように、明示的にバージョンが指定された場合でもBOMバージョンを強制したい場合には、enforcedPlatformを使う必要があります。
+--- com.fasterxml.jackson:jackson-bom:2.9.7 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | +--- com.fasterxml.jackson.core:jackson-core:2.9.7 -> 2.9.8 | \--- com.fasterxml.jackson.core:jackson-databind:2.9.7 -> 2.9.8 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | \--- com.fasterxml.jackson.core:jackson-core:2.9.8 \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
implementation enforcedPlatformを使ってみる
build.gradle
platformをenforcedPlatformにBOMを指定します。
dependencies { implementation enforcedPlatform('com.fasterxml.jackson:jackson-bom:2.9.7') implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8' }
dependenciesの結果
個別指定のバージョンが、BOMに定義されているバージョンで上書きされるようになしました。
+--- com.fasterxml.jackson:jackson-bom:2.9.7 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | +--- com.fasterxml.jackson.core:jackson-core:2.9.7 | \--- com.fasterxml.jackson.core:jackson-databind:2.9.7 | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 | \--- com.fasterxml.jackson.core:jackson-core:2.9.7 \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 -> 2.9.7 (*)
Gradle4.6-RC1でお試し追加されたBOM対応を動かしてみると
Gradle4.6 RC1で追加されたお試し版は動かないですね!
+--- com.fasterxml.jackson:jackson-bom:2.9.7 \--- com.fasterxml.jackson.core:jackson-databind FAILED