Cloud-Clientbibliotheken verwenden

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.