Pour vous assurer que vos projets disposent de versions compatibles des bibliothèques clientes Cloud, utilisez les versions spécifiées dans la nomenclature (BOM) des bibliothèques Google Cloud. Les bibliothèques dans la BOM ne présentent pas de conflits de dépendance qui se manifesteraient en tant que NoSuchMethodError
ou NoClassDefFoundError
.
La BOM est nécessaire, car Google publie plus de deux cents bibliothèques Java Open Source qui facilitent l'utilisation des services dans Google Cloud. Les bibliothèques Google Cloud dépendent de plusieurs bibliothèques de base pouvant être utilisées à des fins générales.
Ces recommandations s'appliquent aux composants des bibliothèques suivantes :
Mettre à jour votre projet pour utiliser la BOM
Pour vous assurer que vos projets utilisent des versions compatibles des bibliothèques et de leurs artefacts de composants, importez com.google.cloud:libraries-bom
et utilisez la BOM pour spécifier les versions de dépendance. Veillez à supprimer toutes les versions que vous avez définies précédemment.
Maven
Importez la BOM dans la section dependencyManagement
de votre fichier pom.xml
.
Incluez les artefacts spécifiques dont vous dépendez dans la section dependencies
, mais ne spécifiez pas les versions des artefacts dans la section 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>
Dans cet exemple, étant donné que la BOM gère les versions de bibliothèque, les versions de google-cloud-storage
et guava
sont omises.
Gradle
Les BOM sont compatibles par défaut dans Gradle 5.x ou version ultérieure. Ajoutez une dépendance platform
sur com.google.cloud:libraries-bom
et supprimez la version des déclarations de dépendance dans le fichier build.gradle
de l'artefact.
dependencies {
implementation platform('com.google.cloud:libraries-bom:25.4.0')
implementation 'com.google.cloud:google-cloud-storage'
implementation 'com.google.guava:guava'
}
Les mots clés platform
et enforcedPlatform
fournissent les versions de dépendance déclarées dans une BOM. Le mot clé enforcedPlatform
applique les versions de dépendance déclarées dans la BOM et remplace donc ce que vous avez spécifié.
Pour en savoir plus sur les mots clés platform
et enforcedPlatform
Gradle 5.x ou version ultérieure, consultez la page Gradle : Importation de BOM Maven.
Si vous utilisez Gradle 4.6 ou une version ultérieure, ajoutez enableFeaturePreview('IMPROVED_POM_SUPPORT')
à votre fichier settings.gradle
.
Pour en savoir plus, consultez les notes de version de Gradle 4.6 : importation de la BOM.
Les versions de Gradle antérieures à la version 4.6 ne sont pas compatibles avec les BOM.
SBT
SBT n'est pas compatible avec les BOM. Vous pouvez trouver les versions recommandées des bibliothèques à partir d'une version de BOM particulière sur le tableau de bord et définir les versions manuellement.
Bazel
Bazel n'est pas compatible avec les BOM. Vous pouvez trouver les versions recommandées des bibliothèques à partir d'une version de BOM particulière sur le tableau de bord et définir les versions manuellement.
Versions de Guava -jre
ou -android
Depuis la sortie de la version 21.0.0, la BOM des bibliothèques inclut la version -jre
de Guava (compatible avec Java 8 et versions ultérieures). La section ci-dessous ne s'applique pas aux utilisateurs de Java 8.
La version Guava de Google contient deux types d'artefacts : les versions "-jre" et "-android".
Celle contenant "-jre" (par exemple, com.google.guava:guava:31.1-jre
) est destinée à Java 8 et est compatible avec les fonctions et les flux lambda.
L'autre type ayant le suffixe "-android" (par exemple, com.google.guava:guava:31.1-android
) est destinée au développement Java 7 et Android.
La BOM des bibliothèques Google Cloud contient Guava avec le type "-android" pour s'assurer que la BOM fonctionne dans Java 7. Cela signifie que la version de Guava dans la BOM ne dispose pas de certaines méthodes destinées aux fonctions lambda de Java 8, telles que ImmutableList.toImmutableList()
.
Si votre projet nécessite Java 8 ou une version ultérieure et utilise des classes Guava telles que com.google.common.collect.Streams
, vous devez ajouter une dépendance à une version JRE de Guava.
Dans 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>
Dans 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'exemple précédent ne fonctionne pas si vous utilisez enforcedPlatform
, car enforcedPlatform
est prioritaire sur constraints
. Si vous souhaitez utiliser enforcedPlatform
avec le type Guava, vous pouvez configurer ResolutionStrategy
.