簡體   English   中英

Java應用程序中的Maven沖突與google-cloud-core-grpc依賴關系

[英]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>

我按照這個問題的答案 -

如何解決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作為子依賴項拉入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM