Usa la lista de materiales (BOM) con las bibliotecas cliente de Cloud para Java

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 deGoogle 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.

Si tienes problemas de compatibilidad con protobuf-java 4.x, actualiza tu base de código y tus dependencias para garantizar la compatibilidad. Consulta las notas de la versión de libraries-bom v26.50.0 para conocer los posibles problemas de compatibilidad. Si esto no es factible, usa com.google.cloud:libraries-bom-protobuf3 como solución alternativa. com.google.cloud:libraries-bom-protobuf3 incluye las mismas bibliotecas cliente y versiones de bibliotecas que libraries-bom.

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. En el siguiente ejemplo, se muestra cómo importar la BOM y cómo incluir el artefacto google-cloud-storage.

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.73.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.cloud</groupId>
    <artifactId>google-cloud-storage-control</artifactId>
  </dependency>
</dependencies>

En este ejemplo, como la BoM administra las versiones de las bibliotecas, se omite la versión de google-cloud-storage.

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.

implementation platform('com.google.cloud:libraries-bom:26.72.0')

implementation 'com.google.cloud:google-cloud-storage'

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 versión -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 versiones 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 versión con el sufijo “-android” (como com.google.guava:guava:31.1-android) es para el desarrollo de Java 7 y Android.

La BOM de Google Cloud Libraries contiene Guava con la versión "-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:26.12.0')
  ...
}

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