[英]Maven conflict in Java app with google-cloud-core-grpc dependency
(我也為此提出了一個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安裝適用於這兩個依賴項。 我需要添加以下(第三)依賴項,以便獨立訂閱Apache Beam管道之外的Google Cloud pub / sub:
谷歌雲,發布訂閱
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安裝沖突。
有一個單獨的谷歌“BOM”(物料清單)依賴管理器應該管理谷歌雲依賴的子依賴,但這並沒有解決我的沖突:
<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>
我按照這個問題的答案 -
我發現了這一點
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
作為子依賴項拉入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發布/ io.grpc:grpc-core:jar
依賴項使用的(一致)版本沖突。
有什么辦法可以解決這個問題嗎? 我可以使用Maven以某種方式隔離子依賴項嗎?
我能夠解決這個問題,只需從google-cloud-pubsub工件中排除grpc-core即可。 它隨后被合並到依賴關系樹中,使用相同的版本1.13.1作為beam-runners的依賴關系-ogle-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>
這不是一個真正的解決方案,但我確實認為問題主要是這個依賴:
<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
上有許多不一致的依賴關系io.grpc:grpc-core:jar
和Apache Beam和Google pub子工件之間的隔離並沒有真正起作用。 無論使用什么版本的google-cloud-pubsub
,它對io.grpc:grpc-core:jar
的依賴都會與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的成本顯着增加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.