Maven conflict in Java app with google-cloud-core-grpc dependency
(I've also raised a GitHub issue for this -
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)
1 2 3 4 5 | <dependency> <groupId>com.google.cloud.dataflow</groupId> 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
1 2 3 4 5 | <dependency> <groupId>org.apache.beam</groupId> beam-runners-google-cloud-dataflow-java</artifactId> <version>2.8.0</version> </dependency> |
使用这两个依赖项,Maven安装可以正常工作。我需要添加以下(第3个)依赖项,以便在Apache Beam管道之外独立订阅Google Cloud发布/订阅:
google-cloud-pubsub
https://mvnrepository.com/artifact/com.google.cloud/google-cloud-pubsub
1 2 3 4 5 | <dependency> <groupId>com.google.cloud</groupId> google-cloud-pubsub</artifactId> <version>1.53.0</version> </dependency> |
(这是最新版本)。添加此选项后,在执行
1 | 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'BOM'(物料清单)依赖性管理器,该管理器应该管理Google Cloud依赖性的子依赖性,但这不能为我解决冲突:
1 2 3 4 5 6 7 8 9 10 11 | <dependencyManagement> <dependencies> <dependency> <groupId>com.google.cloud</groupId> 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
具有以下依赖性:
-
com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:2.5.0
对以下各种版本有从属关系:
(GRPC是一个高性能,开源通用RPC框架)
如果将
在以下GitHub问题上,garrettjonesgoogle于2月21日确认google-cloud-bom没有固定io.grpc:grpc-core的版本:
https://github.com/googleapis/google-cloud-java/issues/2890
似乎Apache Beam依赖关系在内部管理
我有什么办法可以解决这个问题?我可以使用Maven以某种方式隔离子依赖项吗?
我能够解决此问题,只需从Google Cloud-pubsub工件中排除grpc-core即可。此后,它以与Beam-runners-google-cloud-dataflow-java的依赖项相同的版本1.13.1并入依赖项树中。
这是对我有用的pom.xml的摘录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <dependencies> <dependency> <groupId>com.google.cloud</groupId> google-cloud-pubsub</artifactId> <version>1.53.0</version> <exclusions> <exclusion> <groupId>io.grpc</groupId> grpc-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.beam</groupId> beam-runners-google-cloud-dataflow-java</artifactId> <version>2.8.0</version> </dependency> </dependencies> |
这并不是真正的解决方案,但是我确实确定问题主要出在此依赖性上:
1 2 3 4 5 | <dependency> <groupId>com.google.cloud.dataflow</groupId> google-cloud-dataflow-java-sdk-all</artifactId> <version>2.5.0</version> </dependency> |
该工件对
我针对Google工件提出了以下Git问题:
1 | https://github.com/googleapis/google-cloud-java/issues/4095 |
我针对Apache Beam工件提出了以下建议(它指向我提出的Google问题):
https://issues.apache.org/jira/browse/BEAM-6118
我正在通过解决此问题来解决。我可以轮询所需的数据,而不必从订阅的pub / sub中使用它,但这并不是最佳选择,并且会导致Google Cloud的成本显着增加。