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
.