Como usar as bibliotecas de cliente do Cloud

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.