Usa bibliotecas cliente de Cloud

Para asegurarte de que tus proyectos tengan versiones compatibles de las bibliotecas cliente de Cloud, usa las versiones especificadas en la Lista de materiales (BOM) de las bibliotecas de Google Cloud. Las bibliotecas de la BOM no tienen conflictos de dependencia que se manifiesten como NoSuchMethodError o NoClassDefFoundError.

La BOM es necesaria porque Google publica más de doscientas bibliotecas de código abierto de Java que facilitan el uso de servicios en Google Cloud. Las bibliotecas de Google Cloud dependen de varias bibliotecas básicas que se pueden usar para fines generales.

Estas recomendaciones se aplican a los componentes de las siguientes bibliotecas:

Actualiza tu proyecto para usar la BOM

Para asegurarte de que los proyectos usen versiones compatibles de las bibliotecas y sus artefactos de componente, importa com.google.cloud:libraries-bom y usa la BOM para especificar versiones de dependencias. Asegúrate de quitar cualquier versión que hayas configurado antes.

Maven

Importa la BOM en la sección dependencyManagement de tu archivo pom.xml. Incluye artefactos específicos de los que dependes en la sección dependencies, pero no especifiques las versiones de los artefactos en la sección 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>

En este ejemplo, como la BOM administra las versiones de las bibliotecas, se omiten la versión de google-cloud-storage y guava.

Gradle

Las BOM son compatibles de forma predeterminada con Gradle 5.x o versiones posteriores. Agrega una dependencia platform en com.google.cloud:libraries-bom y quita la versión de las declaraciones de dependencias en el archivo build.gradle del artefacto.

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

Las palabras clave platform y enforcedPlatform proporcionan versiones de dependencia declaradas en una BOM. La palabra clave enforcedPlatform aplica las versiones de dependencia declaradas en la BOM y, por lo tanto, anula lo que especificaste. Para obtener más detalles de las palabras clave platform y enforcedPlatform de Gradle 5.x o versiones superiores, consulta Gradle: Cómo importar BOM de Maven.

Si usas Gradle 4.6 o una versión posterior, agrega enableFeaturePreview('IMPROVED_POM_SUPPORT') a tu archivo settings.gradle. Para obtener más información, consulta Notas de la versión de Gradle 4.6: importación de BOM. Las versiones de Gradle anteriores a la 4.6 no admiten BOM.

SBT

SBT no es compatible con las BOM. Puedes encontrar versiones recomendadas de bibliotecas de una versión particular de BOM en el panel y configurar las versiones de forma manual.

Bazel

Bazel no es compatible con las BOM. Puedes encontrar versiones recomendadas de bibliotecas de una versión de BOM en particular en el panel y configurar las versiones de forma manual.

Versiones de Guava -jre o -android

Desde el lanzamiento de la versión 21.0.0, la BOM de bibliotecas incluye la variante -jre de Guava (que admite Java 8+). La sección a continuación no es aplicable para usuarios de Java 8.


La versión de Guava de Google contiene dos tipos de artefactos: “-jre” y “-android”. El que tiene “-jre” (como com.google.guava:guava:31.1-jre) es para Java 8 y admite funciones y transmisiones lambda. La otra variante con el sufijo “-android” (como com.google.guava:guava:31.1-android) es para el desarrollo de Java 7 y Android.

La BOM de las bibliotecas de Google Cloud contiene Guava con la variante “-android” para asegurarse de que la BOM funcione en Java 7. Sin embargo, esto significa que la versión de Guava en la BOM no tiene algunos métodos destinados a las funciones lambda de Java 8, como ImmutableList.toImmutableList().

Si tu proyecto requiere Java 8 o versiones posteriores y usa clases Guava como com.google.common.collect.Streams, debes agregar una dependencia en una versión de JRE de Guava.

En 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>

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

La muestra anterior no funciona si usas enforcedPlatform porque enforcedPlatform tiene prioridad sobre constraints. Si deseas usar enforcedPlatform con la variante Guava, puedes configurar ResolutionStrategy.