Bill of Materials (BOM) mit Cloud-Clientbibliotheken für Java verwenden

Verwenden Sie die in der Google Cloud BOM (Bill of Materials) der Bibliotheken 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 erleichtern Google Cloud. 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.

Wenn Sie Kompatibilitätsprobleme mit protobuf-java 4.x haben, aktualisieren Sie Ihre Codebasis und Abhängigkeiten, um die Kompatibilität sicherzustellen. Informationen zu potenziellen Kompatibilitätsproblemen finden Sie in den Versionshinweisen zu libraries-bom v26.50.0 und libraries-bom v26.75.0 .

Maven

Importieren Sie die BOM in den Abschnitt dependencyManagement Ihrer Datei pom.xml. Geben Sie im Abschnitt dependencies spezifische Artefakte an, von denen Sie abhängig sind, geben Sie im Abschnitt dependencies die Versionen der Artefakte aber nicht an. Das folgende Beispiel zeigt, wie Sie die BOM importieren und das Artefakt google-cloud-storage einfügen.

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.76.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 ausgelassen, da die BOM die Bibliotheksversionen verwaltet.

Gradle

BOMs werden in Gradle 5.x oder höher standardmäßig unterstützt. Fügen Sie eine platform-Abhängigkeit für com.google.cloud:libraries-bom hinzu und entfernen Sie die Version aus den Abhängigkeitsdeklarationen in der Datei build.gradle des Artefakts.

implementation platform('com.google.cloud:libraries-bom:26.78.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.