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

Verwenden Sie die in der Cloud de Confiance-Materialliste (Bill of Materials, BOM) der Bibliotheken angegebenen Versionen, damit Ihre Projekte kompatible Versionen der Cloud-Clientbibliotheken haben. Die Bibliotheken in der BOM haben keine Abhängigkeitskonflikte, die sich als NoSuchMethodError oder NoClassDefFoundError äußern würden.

Die BOM ist erforderlich, da Google über zweihundert Open-Source-Java-Bibliotheken veröffentlicht, die die Verwendung von Diensten in Cloud de Confiance by S3NSerleichtern. DieCloud de Confiance -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 zu gewährleisten. In den Versionshinweisen von libraries-bom v26.50.0 und libraries-bom v26.75.0 finden Sie Informationen zu potenziellen Kompatibilitätsproblemen.

Maven

Importieren Sie die BOM in den dependencyManagement-Abschnitt Ihrer pom.xml-Datei. Fügen Sie bestimmte Artefakte, von denen Sie abhängen, im Abschnitt dependencies ein, geben Sie die Versionen der Artefakte jedoch nicht im Abschnitt dependencies 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.86.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>

Da im BOM die Bibliotheksversionen verwaltet werden, wird in diesem Beispiel die Version von google-cloud-storage weggelassen.

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.86.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 Versionen von Bibliotheken aus einer bestimmten BOM-Version finden Sie im Dashboard. Sie können die Versionen auch 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 der Veröffentlichung von Version 21.0.0 enthält das Bibliotheken-BOM die -jre-Version von Guava (die Java 8 und höher unterstützt). Der Abschnitt unten gilt nicht für Java 8-Nutzer.


Die Guava-Version von Google enthält zwei Versionen von Artefakten: „-jre“- und „-android“-Versionen. 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 Java 7 und die Android-Entwicklung vorgesehen.

Die Cloud de Confiance Libraries-BOM enthält Guava mit der Version „-android“, damit die BOM in Java 7 funktioniert. Das bedeutet jedoch, dass die Version von Guava in der BOM einige Methoden nicht enthält, die für Java 8-Lambda-Funktionen vorgesehen 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.