Para garantir que seus projetos tenham versões compatíveis das
bibliotecas de cliente do Cloud, use as versões especificadas na Google Cloud
lista de materiais (BOM, na sigla em inglês) das bibliotecas. 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 duzentas bibliotecas Java de código aberto que facilitam o uso de serviços no Google Cloud. As Google Cloud bibliotecas 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.
Se você encontrar problemas de compatibilidade com o protobuf-java 4.x, atualize a base de código e as dependências para garantir a compatibilidade. Consulte as notas da versão do libraries-bom v26.50.0 e do libraries-bom v26.75.0 para possíveis problemas de compatibilidade.
Maven
Importe a BOM na seção dependencyManagement do seu arquivo pom.xml.
Inclua artefatos específicos dos quais você depende na seção dependencies, mas não especifique as versões dos artefatos na seção dependencies. O exemplo abaixo demonstra como importar a BOM e incluir o artefato google-cloud-storage.
Neste exemplo, como a BOM gerencia versões de biblioteca, a versão do google-cloud-storage é 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.
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 do Guava do Google contém duas versões de artefatos: "-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 versão com o sufixo "-android" (como com.google.guava:guava:31.1-android) é para desenvolvimento em Java 7 e Android.
A Google Cloud Lista de materiais das bibliotecas contém a versão "-android" do Guava
para garantir que a BOM 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:26.12.0')
...
}
A amostra anterior não funcionará se você usar enforcedPlatform porque enforcedPlatform tem precedência sobre constraints. Se você quiser usar
enforcedPlatform com a versão do Guava, configure
ResolutionStrategy.