Para garantir que seus projetos tenham versões compatíveis das
bibliotecas de cliente do Cloud, use as versões especificadas na lista de materiais (BOM, na sigla em inglês)
do Google Cloud. As bibliotecas no BOM não têm conflitos de dependência que se manifestavam como NoSuchMethodError
ou NoClassDefFoundError
.
O BOM é necessário porque o Google publica mais de 200 bibliotecas Java de código aberto que facilitam o uso de serviços no Google Cloud. As bibliotecas do Google Cloud dependem de várias bibliotecas básicas que podem ser usadas para fins gerais.
Essas recomendações se aplicam aos componentes das seguintes bibliotecas:
Como atualizar seu projeto para usar a BOM
Para garantir que seus projetos usem versões compatíveis das bibliotecas
e dos artefatos de componentes, importe com.google.cloud:libraries-bom
e use
a BOM para especificar versões de dependências. Certifique-se de remover todas as versões definidas
anteriormente.
Maven
Importe a BOM na seção dependencyManagement
do seu arquivo pom.xml
.
Inclua artefatos específicos dos que você depende na seção dependencies
, mas não
especifique as versões dos artefatos na seção 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>
Neste exemplo, como o BOM gerencia versões de biblioteca, a
versão de google-cloud-storage
e guava
é omitida.
Gradle
Por padrão, as BOMs são compatíveis com o Gradle 5.x ou posterior. Adicione uma dependência platform
em com.google.cloud:libraries-bom
e remova a versão das
declarações de dependência no arquivo build.gradle
do artefato.
dependencies {
implementation platform('com.google.cloud:libraries-bom:25.4.0')
implementation 'com.google.cloud:google-cloud-storage'
implementation 'com.google.guava:guava'
}
As palavras-chave platform
e enforcedPlatform
fornecem versões de dependência declaradas em uma BOM. A palavra-chave enforcedPlatform
aplica as versões de dependência declaradas na BOM e, portanto, modifica o que você especificou.
Para ver mais detalhes sobre as palavras-chave platform
e enforcedPlatform
no Gradle 5.x ou versões mais recentes, consulte
Gradle: como importar BOMs do Maven.
Se você estiver usando o Gradle 4.6 ou uma versão mais recente, adicione
enableFeaturePreview('IMPROVED_POM_SUPPORT')
ao arquivo settings.gradle
.
Para saber mais, consulte as Notas da versão do Gradle 4.6: importação de BOM.
Versões do Gradle anteriores à 4.6 não são compatíveis com BOMs.
SBT
O SBT não é compatível com o BOM. Você pode encontrar as versões recomendadas das bibliotecas de uma versão específica do BOM no painel e definir as versões manualmente.
Bazel
O Bazel não é compatível com BOMs. É possível encontrar versões recomendadas de bibliotecas de uma versão específica do BOM no painel e definir as versões manualmente.
Versões do Guava -jre
ou -android
Desde o lançamento da versão 21.0.0, o BOM da biblioteca inclui a versão -jre
do Guava (compatível com Java 8 ou mais recente). A seção abaixo não se aplica a usuários do Java 8.
A versão Guava do Google contém dois tipos de artefatos: versões "-jre" e "-android".
O com "-jre", como com.google.guava:guava:31.1-jre
, é
para Java 8 e compatível com funções e streams lambda.
A outra variação com o sufixo "-android" (como
com.google.guava:guava:31.1-android
) é para Java 7 e desenvolvimento para Android.
A BOM das bibliotecas do Google Cloud contém a Guava com a variação "-android"
para garantir que ela funcione no Java 7. No entanto, isso significa que a versão do Guava no BOM não tem alguns métodos voltados a funções lambda do Java 8, como ImmutableList.toImmutableList()
.
Caso seu projeto precise do Java 8 ou mais recente e use classes Guava
como com.google.common.collect.Streams
, adicione uma dependência em uma
versão JRE do Guava.
No 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>
No 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')
...
}
A amostra anterior não funcionará se você usar enforcedPlatform
porque enforcedPlatform
tem precedência sobre constraints
. Se você quiser usar
enforcedPlatform
com o sabor Guava, configure
ResolutionStrategy
.