Per assicurarti che i tuoi progetti abbiano versioni compatibili delle
librerie client Cloud, utilizza le versioni specificate nella Google Cloud
distinta base (BOM) delle librerie. Le librerie nella distinta base non presentano conflitti di dipendenza che si manifesterebbero come NoSuchMethodError o NoClassDefFoundError.
La distinta base è necessaria perché Google pubblica oltre duecento librerie Java open source che semplificano l'utilizzo dei servizi in Google Cloud. Le Google Cloud librerie dipendono da diverse librerie di base che possono essere utilizzate per scopi generali.
Questi consigli si applicano ai componenti delle seguenti librerie:
Aggiornare il progetto per utilizzare la distinta base
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 la distinta base per specificare le versioni delle dipendenze. Assicurati di rimuovere le versioni che hai impostato in precedenza.
Se riscontri problemi di compatibilità con protobuf-java 4.x, aggiorna il codebase e le dipendenze per garantire la compatibilità. Per potenziali problemi di compatibilità, consulta le note di rilascio di libraries-bom v26.50.0 e libraries-bom v26.75.0 .
Maven
Importa la distinta base nella sezione dependencyManagement del file pom.xml.
Includi gli artefatti specifici da cui dipendi nella sezione dependencies, ma non specificare le versioni degli artefatti nella sezione dependencies. L'esempio seguente mostra come importare la distinta base e includere l'artefatto google-cloud-storage.
In questo esempio, poiché la distinta base gestisce le versioni delle librerie, la versione di google-cloud-storage viene omessa.
Gradle
Le distinte base sono supportate 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.
Le parole chiave platform e enforcedPlatform forniscono le versioni delle dipendenze dichiarate in una distinta base. La parola chiave enforcedPlatform applica le versioni delle dipendenze dichiarate nella distinta base e pertanto sostituisce quelle specificate.
Per ulteriori dettagli sulle parole chiave platform e enforcedPlatform di Gradle 5.x o versioni successive, consulta
Gradle: Importing Maven BOMs.
Se utilizzi Gradle 4.6 o versioni successive, aggiungi
enableFeaturePreview('IMPROVED_POM_SUPPORT') al file settings.gradle.
Per maggiori dettagli, consulta le note di rilascio di Gradle 4.6: BOM import.
Le versioni di Gradle precedenti alla 4.6 non supportano le distinte base.
SBT
SBT non supporta le distinte base. Puoi trovare le versioni consigliate delle librerie da una determinata versione della distinta base nella dashboard e impostare le versioni manualmente.
Bazel
Bazel non supporta le distinte base. Puoi trovare le versioni consigliate delle librerie da una determinata versione della distinta base nella dashboard e impostare le versioni manualmente.
Versioni di Guava -jre o -android
Dalla release della versione 21.0.0, la distinta base delle librerie include la versione -jre di Guava (che supporta Java 8 e versioni successive). La sezione seguente non è applicabile agli utenti di Java 8.
La release di Guava di Google contiene due versioni di artefatti: le versioni "-jre" e "-android".
Quella con "-jre" (ad esempio com.google.guava:guava:31.1-jre) è per Java 8 e supporta le funzioni lambda e gli stream.
L'altra versione con il suffisso "-android" (ad esempio com.google.guava:guava:31.1-android) è per lo sviluppo di Java 7 e Android.
La distinta base delle Google Cloud librerie contiene Guava con la versione "-android"
per assicurarsi che funzioni in Java 7. Tuttavia, ciò significa che la versione di Guava nella distinta base non ha alcuni metodi destinati alle funzioni lambda di Java 8, ad esempio 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 da 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 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')
...
}
L'esempio precedente non funziona se utilizzi enforcedPlatform perché enforcedPlatform ha la precedenza su constraints. Se vuoi utilizzare
enforcedPlatform con la versione di Guava, puoi configurare
ResolutionStrategy.