Bill of Materials (BOM) mit Cloud-Clientbibliotheken für Java 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 zweihundert Open-Source-Java-Bibliotheken veröffentlicht, die die Verwendung von Diensten in Google Clouderleichtern. DieGoogle 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.

Wenn Sie Kompatibilitätsprobleme mit protobuf-java 4.x haben, aktualisieren Sie Ihren Code und Ihre Abhängigkeiten, um die Kompatibilität zu gewährleisten. In den Versionshinweisen zu libraries-bom v26.50.0 finden Sie Informationen zu potenziellen Kompatibilitätsproblemen. Wenn das nicht möglich ist, verwenden Sie com.google.cloud:libraries-bom-protobuf3 als Workaround. com.google.cloud:libraries-bom-protobuf3 enthält dieselben Clientbibliotheken und Bibliotheksversionen wie libraries-bom.

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. Im Beispiel unten wird gezeigt, wie Sie das BOM importieren und das google-cloud-storage-Artefakt einfügen.

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.73.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.cloud</groupId>
    <artifactId>google-cloud-storage-control</artifactId>
  </dependency>
</dependencies>

In diesem Beispiel wird die Version von google-cloud-storage 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.

implementation platform('com.google.cloud:libraries-bom:26.72.0')

implementation 'com.google.cloud:google-cloud-storage'

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 die -jre-Version von Guava, die Java 8+ unterstützt. Der folgende Abschnitt gilt nicht für Java 8-Nutzer.


Die Guava-Version von Google enthält zwei Versionen 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. Die andere Version mit dem Suffix "-android" (z. B. com.google.guava:guava:31.1-android) ist für die Java 7- und Android-Entwicklung gedacht.

Die Google Cloud Libraries-BOM enthält Guava mit der Version „-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:26.12.0')
  ...
}

Das vorherige Beispiel funktioniert nicht, wenn Sie enforcedPlatform verwenden, da enforcedPlatform Vorrang vor constraints hat. Wenn Sie enforcedPlatform mit der Guava-Version verwenden möchten, können Sie ResolutionStrategy konfigurieren.