Конфликт Maven в приложении Java с зависимостью google-cloud-core-grpc

106
11

(Я также поднял вопрос GitHub для этого - https://github.com/googleapis/google-cloud-java/issues/4095)

У меня есть последние версии следующих двух зависимостей для Apache Beam:

Зависимость 1 - google-cloud-dataflow-java-sdk-all

(Распространение Apache Beam, предназначенное для упрощения использования Apache Beam в службе Google Cloud Dataflow - https://mvnrepository.com/artifact/com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all)

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

Зависимость 2 - лучеры-google-cloud-dataflow-java

(Я предполагаю, что это позволяет фактический запуск Beam-конвейера внутри облачного потока данных Google)

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

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

Установка Maven отлично работает с этими двумя зависимостями. Мне нужно добавить следующую (3-ей) зависимость для самостоятельной подписки на паб /sub Google Cloud вне конвейера Apache Beam:

Google-облако PubSub

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

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

(Это последняя версия). После этого я получаю следующий конфликт после того, как сделаю mvn 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

У меня не возникает конфликт между установкой Maven, если я google-cloud-pubsub зависимости Apache Beam и сохраняю зависимость google-cloud-pubsub.

Там есть отдельный менеджер зависимостей "Спецификация" (Bill of Materials), который должен управлять зависимостями зависимостей Google Cloud, но это не решает конфликт для меня:

  <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>

Я последовал за ответом на этот вопрос -

Как разрешить конфликт зависимостей в Maven?

и я определил, что

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

имеет подзависимость от:

io.grpc:grpc-core:jar:1.16.1

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

имеет подзависимости для различных версий:

io.grpc:grpc-core:jar

(GRPC - это высокопроизводительная универсальная RPC-платформа с открытым исходным кодом)

Если я добавлю io.grpc:grpc-core:jar:1.6.1 как явную зависимость от моего POM файла, он не "связывает" зависимость, поскольку она по-прежнему втягивается как com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0.

В следующем выпуске GitHub garrettjonesgoogle подтверждает 21 февраля, что google-cloud-bom не привязывает версию для io.grpc: grpc-core:

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

Кажется, что зависимость Apache Beam управляет различными версиями io.grpc:grpc-core:jar внутри, однако это противоречит (последовательной) версии, используемой зависимостью pub/sub Google.

Есть ли что-нибудь, что я могу сделать, чтобы обойти это? Могу ли я изолировать субзависимости каким-то образом с помощью Maven?

спросил(а) 2018-11-22T08:15:00+03:00 1 год, 10 месяцев назад
1
Решение
57

Я смог решить эту проблему, просто исключив grpc-core из артефакта google-cloud-pubsub. После этого он включается в дерево зависимостей с той же версией 1.13.1, что и зависимость лучей-goners-cloud-dataflow-java

Это exceprt pom.xml, который работал для меня.

<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-pubsub</artifactId>
<version>1.53.0</version>
<exclusions>
<exclusion>
<groupId>io.grpc</groupId>
<artifactId>grpc-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>

ответил(а) 2018-11-30T16:40:00+03:00 1 год, 10 месяцев назад
57

На самом деле это не решение, но я определил, что проблема связана главным образом с этой зависимостью:

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

Этот артефакт имеет ряд противоречивых зависимостей от io.grpc:grpc-core:jar и изоляция между Apache Beam и артефактами Google pub не работают должным образом. Какая бы версия google-cloud-pubsub не использовалась, ее собственная зависимость от io.grpc:grpc-core:jar будет конфликтовать с одной из версий io.grpc:grpc-core:jar.

Я поднял следующую проблему Git против артефакта Google:


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

И я поставил следующее против артефакта Apache Beam (он указывает на проблему Google, которую я поднял):

https://issues.apache.org/jira/browse/BEAM-6118

Я рассматриваю проблему, работая над ней. Я могу опросить данные, которые мне нужны, вместо того, чтобы тратить их на подписку на pub/sub, однако это не является оптимальным и приведет к значительному увеличению расходов на Google Cloud.

ответил(а) 2018-11-26T01:30:00+03:00 1 год, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема