(为此我也提出了GitHub问题- https://github.com/googleapis/google-cloud-java/issues/4095)
对于Apache Beam,我具有以下2个依赖项的最新版本:
依赖性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安装与这2个依赖项配合良好。我需要添加以下(第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“物料清单”(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>
我遵循了这个问题的答案-
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以某种方式隔离子依赖吗?
答案 0 :(得分:5)
我能够解决此问题,只需从Google Cloud-pubsub工件中排除grpc-core即可。此后,它将其与Beam-runners-google-cloud-dataflow-java
的依赖项合并到与依赖项树相同的1.13.1版本中。这是对我有用的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>
答案 1 :(得分:2)
这并不是真正的解决方案,但是我确实确定问题主要出在这种依赖性上:
<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 sub工件之间的隔离实际上无法正常工作。无论使用哪种版本的google-cloud-pubsub
,它自己对io.grpc:grpc-core:jar
的依赖都将与io.grpc:grpc-core:jar
的版本之一冲突。
我针对Google工件提出了以下Git问题:
https://github.com/googleapis/google-cloud-java/issues/4095
我针对Apache Beam工件提出了以下要求(它指向我提出的Google问题):
https://issues.apache.org/jira/browse/BEAM-6118
我正在通过解决此问题来解决。我可以轮询所需的数据,而不必从订阅的pub / sub中使用它,但这不是最佳选择,并且会导致Google Cloud的成本显着增加。