当前位置: 首页 > 知识库问答 >
问题:

maven冲突Java应用程序与google-lowd-core-grpc依赖

穆英飙
2023-03-14

(我还为此提出了一个GitHub问题-https://github.com/googleapis/google-cloud-java/issues/4095)

我有以下两个Apache Beam依赖项的最新版本:

依赖1-谷歌-云-数据流-java-sdk-all

(Apache Beam的发行版,旨在简化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-谷歌云数据流java

(我猜这允许在Google Cloud数据流中实际运行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发布/订阅:

谷歌云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安装后,我会遇到以下冲突:

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

如果我删除apachebeam依赖项并保留googlecloud-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.云:谷歌云pubsub:jar:1.53.0

有一个子依赖项:

io。grpc:grpc核心:jar:1.16.1

  • com.google.cloud.dataflow: google-lowd-dataflow-java-sdk-all: jar: 2.5.0

对以下各种版本具有子依赖关系:

io。grpc:grpc核心:jar

(GRPC是一个高性能、开源的通用RPC框架)

如果我添加io.grpc: grpc-core: jar: 1.6.1作为POM文件的显式依赖项,它不会将依赖项固定为子依赖项,因为它仍然被com.google.cloud.dataflow:谷歌云数据流javasdk-all: jar: 2.5.0.

在接下来的GitHub问题上,garrettjonesgoogle于2月21日确认google云bom没有为io锁定版本。grpc:grpc核心:

https://github.com/googleapis/google-cloud-java/issues/2890

apachebeam依赖项似乎管理着不同版本的io。grpc:grpc core:jar内部,但是这与Google发布/订阅依赖项使用的(一致的)版本冲突。

我能做些什么来解决这个问题吗?我可以用Maven隔离子依赖吗?


共有2个答案

仲柏
2023-03-14

这并不是一个真正的解决方案,但我确实发现问题主要在于这种依赖性:

<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以及apachebeam和googlepub子工件之间的隔离并没有真正正常工作。无论使用的是什么版本的googlecloudpubsub,它都依赖于io。grpc:grpc core:jar将与io的一个版本冲突。grpc:grpc核心: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来使用这些数据,但这并不是最优的,而且会导致谷歌云的成本大幅增加。

柳涵意
2023-03-14

我能够解决这个问题购买只是排除grpc-core从谷歌云pubsub神器。它被合并到依赖树之后与相同的版本1.13.1作为束流-runners-google云-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>
 类似资料:
  • 由一些模块组成的maven项目。我的一个模块正在使用google版本的guava依赖项。现在,我正在我的项目中集成另一个模块,该模块也使用guava但版本。 因此,我希望新模块使用guava版本,而其余项目使用guava版本。我尝试将guava的添加到新模块中,但没有成功。 更新:@Guillaume Darmont的答案为不同的模块解决了问题。但现在我的问题是,新模块有两个依赖项,其中一个使用g

  • 我有一个简单的java应用程序-maven项目在我的Netbean IDE。 在我创建Maven Web Application并添加第一个项目作为依赖项之后,Netbean显示一切都很好,我也可以使用所有方法。 但在运行时,我会 在不创建多模块JavaEE应用程序的情况下,是否有可能使web项目依赖于简单的java应用程序?

  • 我有一个具有以下依赖项的GWT项目 > Gin 2.1.2依赖于guice 3.0,而owlapi 4.0.2依赖于guice 4.0-beta。 gin在客户端使用,而owlapi在服务器端使用。 我有什么办法才能让这件事成功?我是否可以在保留正常运行的GWT devmode的同时使用依赖关系范围?

  • 问题内容: 我有以下代码: 这正常工作。但是,我还需要在pom.xml中添加Xalan作为依赖项,当我这样做时,上面的代码现在会引发错误: 我认为这与Xalan的jar中有一个不同的Transformer实现有关。在不更改上述代码并将Xalan保留为依赖关系的情况下,如何解决此冲突? 问题答案: 从Xalan中排除Xerces可以解决此问题:

  • 问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下

  • 我今天心情不好,想找出这个错误发生在我身上的原因。 当我运行它使服务器停止,当我尝试重新启动服务器时,它会输出一个错误。请记住,在端口上运行,在端口上运行。这是app没有试图以任何方式与MySQL对话或连接,因此它们不应该相互交互。 平台:数字海洋,操作系统:Ubuntu 16.04,节点版本:8.2.1,MySQL版本:5.7 --定义者:systemd--支持:input_userauth_r