(我还提出了一个GitHub问题- https://github.com/googleapis/google-cloud-java/issues/4095)
我有Apache的以下两个依赖项的最新版本:
依赖1- google-cloud-dataflow-java-sdk-all
(为简化Google服务-https://mvnrepository.com/artifact/com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all上Apache的使用而设计的Apache分布)
<dependency>
<groupId>com.google.cloud.dataflow</groupId>
<artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
<version>2.5.0</version>
</dependency>Dependency 2- beam-runners-google-cloud-dataflow-java
(我猜这允许在中实际运行一个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管道之外的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依赖项并保留google-cloud-pubsub依赖项,则不会出现任何Maven安装冲突。
有一个单独的Google 'BOM‘(BOM)依赖关系管理器,它应该管理Google云依赖项的子依赖项,但这并不能解决冲突:
<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依赖项似乎在内部管理不同版本的io.grpc:grpc-core:jar,但是这与Google /sub依赖项使用的(一致)版本相冲突。
我能做些什么来解决这个问题吗?我可以以某种方式使用Maven来隔离子依赖吗?
发布于 2018-11-30 13:40:13
我能够解决这个问题,购买只是排除了grpc-核心从谷歌云-公共构件。之后,它被合并到依赖树中,其版本为1.13.1,与束运行器-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>发布于 2018-11-25 22:30:04
然而,这并不是一个真正的解决方案,但我确实发现问题主要与这种依赖有关:
<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和Google子构件之间的隔离并不能正常工作。无论使用的是哪个版本的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工件的问题(它指向我提出的Google问题):
https://issues.apache.org/jira/browse/BEAM-6118
我正在努力解决这个问题。我可以轮询我需要的数据,而不是通过订阅发布/订阅来消耗数据,但是这并不是最优的,而且会导致Google的成本大幅增加。
https://stackoverflow.com/questions/53424272
复制相似问题