Verwenden Sie die in der Google Cloud-BOM angegebenen Versionen, damit Ihre Projekte kompatible Versionen von Cloud-Clientbibliotheken haben. Die Bibliotheken in der BOM haben keine Abhängigkeitskonflikte, die als NoSuchMethodError
oder NoClassDefFoundError
auftreten würden.
Die BOM ist erforderlich, da Google über zwei hundert Open-Source-Java-Bibliotheken veröffentlicht, die die Verwendung von Diensten in Google Cloud erleichtern. Die Google Cloud-Bibliotheken hängen von mehreren grundlegenden Bibliotheken ab, die für allgemeine Zwecke verwendet werden können.
Diese Empfehlungen gelten für die Komponenten der folgenden Bibliotheken:
Projekt für die Verwendung der BOM aktualisieren
Damit Ihre Projekte kompatible Versionen der Bibliotheken und ihrer Komponentenartefakte verwenden, importieren Sie com.google.cloud:libraries-bom
und verwenden Sie die BOM, um Abhängigkeitsversionen anzugeben. Entfernen Sie unbedingt alle Versionen, die Sie zuvor festgelegt haben.
Maven
Importieren Sie die BOM in den dependencyManagement
-Abschnitt Ihrer pom.xml
-Datei.
Geben Sie im dependencies
-Abschnitt spezifische Artefakte an, von denen Sie abhängig sind, geben Sie im dependencies
-Abschnitt die Versionen der Artefakte aber nicht an.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>25.4.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
In diesem Beispiel werden die Versionen von google-cloud-storage
und guava
weggelassen, da die BOM Bibliotheksversionen verwaltet.
Gradle
BOMs werden in Gradle 5.x oder höher standardmäßig unterstützt. Fügen Sie die Abhängigkeit platform
in com.google.cloud:libraries-bom
ein und entfernen Sie die Version aus den Abhängigkeitsdeklarationen in der Datei build.gradle
des Artefakts.
dependencies {
implementation platform('com.google.cloud:libraries-bom:25.4.0')
implementation 'com.google.cloud:google-cloud-storage'
implementation 'com.google.guava:guava'
}
Die Keywords platform
und enforcedPlatform
stellen Abhängigkeitsversionen bereit, die in einer BOM deklariert sind. Das Keyword enforcedPlatform
erzwingt die in der BOM deklarierten Abhängigkeitsversionen und überschreibt damit das, was Sie angegeben haben.
Weitere Informationen zu den Keywords platform
und enforcedPlatform
mit Gradle ab Version 5.x finden Sie unter Gradle: Maven-BOMs importieren.
Wenn Sie Gradle 4.6 oder höher verwenden, fügen Sie enableFeaturePreview('IMPROVED_POM_SUPPORT')
zu Ihrer Datei settings.gradle
hinzu.
Weitere Informationen finden Sie unter Gradle 4.6-Versionshinweise: BOM-Import.
Versionen von Gradle vor 4.6 unterstützen keine BOMs.
SBT
SBT unterstützt BOMs nicht. Empfohlene Bibliotheksversionen aus einer bestimmten BOM-Version finden Sie im Dashboard. Sie können die Versionen manuell festlegen.
Bazel
Bazel unterstützt BOMs nicht. Empfohlene Bibliotheksversionen aus einer bestimmten BOM-Version finden Sie im Dashboard. Sie können die Versionen manuell festlegen.
Guava-Versionen -jre
oder -android
Seit Version 21.0.0 enthält die Libraries BOM den -jre
-Flavor von Guava, der Java 8+ unterstützt. Der folgende Abschnitt gilt nicht für Java 8-Nutzer.
Die Guava-Version von Google enthält zwei Flavors von Artefakten: die Versionen "-jre" und "-android".
Die Version mit "-jre" (z. B. com.google.guava:guava:31.1-jre
) ist für Java 8 vorgesehen und unterstützt Lambda-Funktionen und -Streams.
Der andere Flavor mit dem Suffix "-android" (z. B. com.google.guava:guava:31.1-android
) ist für die Java 7- und Android-Entwicklung gedacht.
Die BOM der Google Cloud-Bibliothek enthält Guava des Flavor "-android", um sicherzustellen, dass die BOM in Java 7 funktioniert. Das bedeutet, dass die Version von Guava in der BOM keine Methoden enthält, die für Java 8-Lambda-Funktionen gedacht sind, z. B. ImmutableList.toImmutableList()
.
Wenn für Ihr Projekt Java 8 oder höher erforderlich ist und Guava-Klassen wie com.google.common.collect.Streams
verwendet werden, sollten Sie eine Abhängigkeit von einer JRE-Version von Guava hinzufügen.
In Maven:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version> <!-- "-jre" for Java 8 or higher -->
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
...
</dependencyManagement>
In Gradle:
dependencies {
constraints {
implementation 'com.google.guava:guava:31.1-jre' // "-jre" for Java 8 or higher
}
implementation platform('com.google.cloud:libraries-bom:25.4.0')
...
}
Das vorherige Beispiel funktioniert nicht, wenn Sie enforcedPlatform
verwenden, da enforcedPlatform
Vorrang vor constraints
hat. Wenn Sie enforcedPlatform
mit dem Guava-Flavor verwenden möchten, können Sie ResolutionStrategy
konfigurieren.