Utiliser les bibliothèques clientes Cloud

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.