Utilizzo delle libreria client di Cloud

Per assicurarti che i tuoi progetti dispongano di versioni compatibili delle librerie client di Cloud, utilizza le versioni specificate nella distinta base dei materiali nelle Google Cloud Librerie. Le librerie del BOM non hanno conflitti di dipendenza che si manifestano come NoSuchMethodError o NoClassDefFoundError.

Il BOM è necessario perché Google pubblica oltre 200 librerie Java open source che semplificano l'utilizzo dei servizi in Google Cloud. Le librerie di Google Cloud dipendono da diverse librerie di base che possono essere utilizzate per scopi generici.

Questi suggerimenti si applicano ai componenti delle seguenti librerie:

Aggiornare il progetto per utilizzare il BOM

Per assicurarti che i tuoi progetti utilizzino versioni compatibili delle librerie e dei relativi artefatti dei componenti, importa com.google.cloud:libraries-bom e utilizza il BOM per specificare le versioni delle dipendenze. Assicurati di rimuovere tutte le versioni impostate in precedenza.

Maven

Importa il BOM nella sezione dependencyManagement del file pom.xml. Includi elementi specifici da cui dipende la sezione dependencies, ma non specificare le versioni nella sezione dependencies.

  <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 questo esempio, poiché il BOM gestisce le versioni della libreria, le versioni google-cloud-storage e guava vengono omesse.

Gradle

I BOM sono supportati per impostazione predefinita in Gradle 5.x o versioni successive. Aggiungi una dipendenza platform su com.google.cloud:libraries-bom e rimuovi la versione dalle dichiarazioni di dipendenza nel file build.gradle dell'artefatto.

dependencies {
  implementation platform('com.google.cloud:libraries-bom:25.4.0')
  implementation 'com.google.cloud:google-cloud-storage'
  implementation 'com.google.guava:guava'
}

Le parole chiave platform e enforcedPlatform forniscono versioni delle dipendenze dichiarate in un BOM. La parola chiave enforcedPlatform applica le versioni delle dipendenze dichiarate nel BOM, sostituendo le informazioni specificate. Per maggiori dettagli sulle parole chiave platform e enforcedPlatform Gradle 5.x o versioni successive, consulta Gradle: import Maven BOM.

Se utilizzi Gradle 4.6 o versioni successive, aggiungi enableFeaturePreview('IMPROVED_POM_SUPPORT') al file settings.gradle. Per maggiori dettagli, consulta Note di rilascio 4.6: Importazione BOM. Le versioni di Gradle precedenti alla 4.6 non supportano i BOM.

SBT

SBT non supporta i DOM. Puoi trovare le versioni consigliate delle librerie di una determinata versione BOM nella dashboard e impostare le versioni manualmente.

Bazel

Bazel non supporta i BOM. Puoi trovare le versioni consigliate delle librerie di una determinata versione BOM nella dashboard e impostare le versioni manualmente.

Versioni di Guava -jre o -android

Dal rilascio della versione 21.0.0, il BOM di Librerie include il gusto -jre di Guava (che supporta Java 8+). La sezione seguente non è applicabile agli utenti di Java 8.


La versione di Guava di Google contiene due gusti di artefatti: versioni "jre" e "android". Quello con "-jre" (ad esempio com.google.guava:guava:31.1-jre) è per Java 8 e supporta funzioni e flussi lambda. L'altro tipo di suffisso con il suffisso "-android" (ad esempio com.google.guava:guava:31.1-android) è per Java 7 e per lo sviluppo Android.

Il BOM di Google Cloud Librerie contiene Guava con il gusto "-android" per garantire che il BOM funzioni in Java 7. Tuttavia, questo significa che la versione di Guava nella BOM non ha alcuni metodi destinati alle funzioni lambda Java 8, come ImmutableList.toImmutableList().

Se il tuo progetto richiede Java 8 o versioni successive e utilizza classi Guava come com.google.common.collect.Streams, devi aggiungere una dipendenza su una versione JRE di Guava.

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 gradi 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')
  ...
}

L'esempio precedente non funziona se utilizzi enforcedPlatform, perché enforcedPlatform ha la precedenza su constraints. Se vuoi utilizzare enforcedPlatform con il gusto Guava, puoi configurare ResolutionStrategy.