【发布时间】:2019-04-24 17:49:55
【问题描述】:
(我还为此提出了一个 GitHub 问题 - https://github.com/googleapis/google-cloud-java/issues/4095)
我有以下 2 个 Apache Beam 依赖项的最新版本:
依赖 1 - google-cloud-dataflow-java-sdk-all
(旨在简化 Apache Beam 在 Google Cloud Dataflow 服务上的使用的 Apache Beam 发行版 - 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
(我猜这允许在 Google Cloud Dataflow 中实际运行 Beam 管道)
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 个)依赖项,以便在 Apache Beam 管道之外独立订阅 Google Cloud pub/sub:
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
如果我删除 Apache Beam 依赖项并保留 google-cloud-pubsub 依赖项,我不会遇到任何 Maven 安装冲突。
有一个单独的 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>
我按照这个问题的答案 -
How do I resolve a dependency conflict in 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 于 2 月 21 日确认 google-cloud-bom 没有固定 io.grpc:grpc-core 的版本:
https://github.com/googleapis/google-cloud-java/issues/2890
Apache Beam 依赖项似乎在内部管理 io.grpc:grpc-core:jar 的不同版本,但这与 Google pub/sub 依赖项使用的(一致)版本冲突。
我能做些什么来解决这个问题吗?我可以使用 Maven 以某种方式隔离子依赖项吗?
【问题讨论】:
-
运气好吗?我现在遇到了完全相同的问题。
-
@Iso 我添加了更多信息,但仍未解决我的问题。您可以查看此问题的答案,这可能会帮助您确定问题依赖项是什么 - stackoverflow.com/questions/37594922/…。如果您按照说明进行操作,您应该会得到一个显示依赖项的文本文件,以逗号分隔,包。在 2 个或更多不同的包中查找相同子依赖项的不同版本号。您可以看到任何重复的具有不同版本号的包都可能是您的问题包。
-
@Iso 你也可以试试这个来识别你的冲突依赖,虽然它对我不起作用它只是给了我已经得到的相同的错误输出 - maven.apache.org/插件/maven-dependency-plugin/examples/…
-
@Iso 我添加了一个“答案”。这不是一个实际的解决方案,但它确定了我的问题的原因。我现在正在解决这个问题。你可以通过轮询而不是使用 pub/sub 来做同样的事情吗?
标签: java maven google-cloud-platform google-cloud-dataflow apache-beam