Конфликт Maven в приложении Java с зависимостью google-cloud-core-grpc - PullRequest
0 голосов
/ 22 ноября 2018

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

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

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

(Распространение Apache Beam, предназначенное для упрощения использования Apache Beam в службе облачных данных Google - 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 - beam-runners-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 отлично работает с этими двумя зависимостями. Мне нужно добавить следующую (третью) зависимость для независимой подписки на паб Google Cloud/ sub вне конвейера Apache Beam:

google-cloud-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, если я удаляю зависимости Apache Beam и сохраняю зависимость google-cloud-pubsub.

Существует отдельный менеджер зависимостей Google 'BOM' (ведомость материалов), который должен управлять подчиненными зависимостями зависимостей 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?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

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

Это отрывок из 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>
0 голосов
/ 26 ноября 2018

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

<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 не работают должным образом.Какая бы версия 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...