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
.