onflito do @Maven no aplicativo Java com dependência google-cloud-core-grpc

(Também levantei um problema no GitHub para isso -https: //github.com/googleapis/google-cloud-java/issues/409)

Tenho as versões mais recentes das 2 dependências a seguir para o Apache Beam:

Dependency 1 - google-nuvem-fluxo de dados-java-sdk-all

(Uma distribuição do Apache Beam projetada para simplificar o uso do Apache Beam no serviço Google Cloud Dataflow -https: //mvnrepository.com/artifact/com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-al)

<dependency>
  <groupId>com.google.cloud.dataflow</groupId>
  <artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
  <version>2.5.0</version>
</dependency>

Dependency 2 - feixe-corredores-google-nuvem-fluxo de dados-java

(Suponho que isso permita a execução real de um pipeline do Beam dentro de um Google Cloud Dataflow)

https: //mvnrepository.com/artifact/org.apache.beam/beam-runners-google-cloud-dataflow-jav

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
  <version>2.8.0</version>
</dependency>

A instalação do Maven funciona bem com essas 2 dependências. Preciso adicionar a (terceira) dependência a seguir para assinar independentemente um pub / sub do Google Cloud fora de um pipeline do Apache Beam:

google-nuvem-pubsub

https: //mvnrepository.com/artifact/com.google.cloud/google-cloud-pubsu

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-pubsub</artifactId>
  <version>1.53.0</version>
</dependency>

(Esta é a versão mais recente). Depois que isso é adicionado, recebo o seguinte conflito depois de fazermvn clean install:

Could not resolve version conflict among [com.google.cloud:google-cloud-pubsub:jar:1.53.0 -> com.google.cloud:google-cloud-core-grpc:jar:1.53.0 -> io.grpc:grpc-protobuf:jar:1.16.1 -> io.grpc:grpc-core:jar:1.16.1, com.google.cloud:google-cloud-pubsub:jar:1.53.0 -> com.google.cloud:google-cloud-core-grpc:jar:1.53.0 -> io.grpc:grpc-protobuf:jar:1.16.1 -> io.grpc:grpc-protobuf-lite:jar:1.16.1 -> io.grpc:grpc-core:jar:1.16.1, com.google.cloud:google-cloud-pubsub:jar:1.53.0 -> io.grpc:grpc-netty-shaded:jar:1.16.1 -> io.grpc:grpc-core:jar:[1.16.1,1.16.1], com.google.cloud:google-cloud-pubsub:jar:1.53.0 -> io.grpc:grpc-stub:jar:1.16.1 -> io.grpc:grpc-core:jar:1.16.1, com.google.cloud:google-cloud-pubsub:jar:1.53.0 -> io.grpc:grpc-auth:jar:1.16.1 -> io.grpc:grpc-core:jar:[1.16.1,1.16.1], com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> io.grpc:grpc-core:jar:1.2.0, com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> io.grpc:grpc-netty:jar:1.2.0 -> io.grpc:grpc-core:jar:[1.2.0,1.2.0], com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> com.google.cloud.bigtable:bigtable-protos:jar:1.0.0-pre3 -> io.grpc:grpc-core:jar:1.5.0, com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> com.google.cloud.bigtable:bigtable-client-core:jar:1.0.0 -> io.grpc:grpc-core:jar:1.7.0, com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> com.google.cloud.bigtable:bigtable-client-core:jar:1.0.0 -> io.opencensus:opencensus-contrib-grpc-util:jar:0.7.0 -> io.grpc:grpc-core:jar:1.6.1, com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> io.grpc:grpc-all:jar:1.2.0 -> io.grpc:grpc-core:jar:[1.2.0,1.2.0], com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> io.grpc:grpc-all:jar:1.2.0 -> io.grpc:grpc-okhttp:jar:1.2.0 -> io.grpc:grpc-core:jar:[1.2.0,1.2.0], com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0 -> org.apache.beam:beam-sdks-java-io-google-cloud-platform:jar:2.5.0 -> io.grpc:grpc-all:jar:1.2.0 -> io.grpc:grpc-protobuf-nano:jar:1.2.0 -> io.grpc:grpc-core:jar:1.2.0

Não recebo nenhum conflito de instalação do Maven se remover as dependências do Apache Beam e manter ogoogle-cloud-pubsub dependência.

Existe um gerenciador de dependências 'Lista de materiais' do Google (Bill of Materials) que deve gerenciar subdependências das dependências do Google Cloud, mas isso não resolve o conflito para mim:

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bom</artifactId>
        <version>0.71.0-alpha</version>
        <type>pom</type>
        <scope>import</scope>
       </dependency>
     </dependencies>
  </dependencyManagement>

Eu segui a resposta para esta pergunta -

Como resolver um conflito de dependência no Maven?

e identifiquei que

com.google.cloud:google-cloud-pubsub:jar:1.53.0

tem uma subdependência de:

io.grpc:grpc-core:jar:1.16.1

com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0

tem subdependências em várias versões de:

io.grpc:grpc-core:jar

(GRPC é uma estrutura RPC universal de código aberto de alto desempenho)

Se eu adicionario.grpc:grpc-core:jar:1.6.1 como uma dependência explícita do meu arquivo POM, ele não 'fixa' a dependência, pois ainda é puxada como uma subdependência porcom.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0.

Na edição seguinte do GitHub, o garrettjonesgoogle confirma em 21 de fevereiro que o google-cloud-bom não fixa a versão do io.grpc: grpc-core:

https: //github.com/googleapis/google-cloud-java/issues/289

Parece que a dependência do Apache Beam gerencia as diferentes versões doio.grpc:grpc-core:jar internamente, no entanto, isso entra em conflito com a versão (consistente) usada pela dependência pub / sub do Google.

Existe algo que eu possa fazer para solucionar isso? Posso isolar subdependências de alguma forma usando o Maven?

questionAnswers(2)

yourAnswerToTheQuestion