BOM-Dateien mit Gradle benutzen

Dieser Blog-Post soll einen kurzen Überblick darüber geben, was BOMs sind, warum man diese verwenden möchte und wie dies mit Gradle funktioniert.

Was ist eine BOM?

Bei einer BOM (Bill Of Materials) handelt es sich um eine Maven POM, welche einen <dependencyManagement> Block enthält. Mithilfe von diesem können für Abhängigkeiten deren Version festgelegt werden.

Z. B. hier ein Ausschnitt der BOM von Spring Boot (http://central.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.1.2.RELEASE/spring-boot-dependencies-2.1.2.RELEASE.pom)

Warum will man eine BOM verwenden?

Welche Vorteile ergeben sich jetzt aus einer BOM? Nun, zuerst wird die Verantwortung, passende kompatible Versionen auszuwählen, auf den BOM-Ersteller verlagert. Z. B. in diesem Fall auf das Spring-Team, von dem im Allgemeinen davon auszugehen ist, dass sie besser wissen, welche Versionen von welchen Modulen zueinander kompatibel sind. Z. B. wird mit der BOM oben sichergestellt, dass wenn eine Abhängigkeit auf RabbitMQ besteht, dann die Version 5.4.3 benutzt wird. Dies kann eine Menge Aufwand und viele Fehlerquellen bei der manuellen Pflege von Abhängigkeiten reduzieren.

Wie funktioniert dies in Gradle?

Nachdem nun die Vorteile von BOMs erläutert worden sind, kommen wir zur Verwendung. Tatsächlich wird hierfür in Gradle einfach ganz normal eine
Abhängikeit auf die BOM gesetzt, also z. B.:

dependencies {
  implementation 'org.springframework.boot:spring-boot-dependencies:2.1.2.RELEASE'
}

Wenn nun weitere Abhängikeiten benötigt werden, wird hier die Version nicht angegeben, also:

dependencies {
  implementation 'org.springframework.boot:spring-boot-dependencies:2.1.2.RELEASE'
  implementation 'com.amqp-client'
}

Die Version wird dann über die BOM auf die 5.4.3 aufgelöst und diese wird verwendet. Zusätzlich kann hierdurch auf einfache Weise sichergestellt werden, dass nicht aus Versehen beim Update von Spring-Boot in einzelnen Modulen noch eine falsche Version verwendet wird.


Damit die BOM-Funktionalität in Gradle verfügbar ist, wird Version 5.0 oder notfalls eine Version ab 4.6 und enableFeaturePreview('IMPROVED_POM_SUPPORT') in der settings.gradle benötigt.

Short URL for this post: https://wp.me/p4nxik-3g2
This entry was posted in Build, config and deploy and tagged . Bookmark the permalink.

Leave a Reply