Spring 依赖混乱 - 与 Spring Boot 2.5.4 和 Spring Cloud 3.0.3 冲突

Spring Dependency Mess - conflict with Spring Boot 2.5.4 and Spring Cloud 3.0.3

我正在尝试更新一个已经安装在厨房水槽中的应用程序(或者可能有几个,它们是在臀部连接的)并且我正在对版本冲突进行排序。

我想更新到 Spring Boot 2.5+ 并使用 Spring Cloud Consul - 我正在尝试加入:

  1. spring-cloud-starter-consul-discovery:3.0.3
  2. spring-boot:2.5.4

对于奖励积分,在 spring-cloud-starter-consul-discovery 中,我看到它引入了 reactor-core:3.4.6,同时引入了 reactor-extra:3.4.3 (它引入了 reactor-core:3.4.5)。清单还在继续......

  1. https://search.maven.org/artifact/org.springframework.cloud/spring-cloud-starter-consul-discovery/3.0.3/jar - 最初的争论点是它引入了 spring 引导 2.4.6 ... 它被宣传为支持 2.5+,那么不应该版本参考 2.5+?

  2. https://search.maven.org/artifact/org.springframework.cloud/spring-cloud-loadbalancer/3.0.3/jar - this to me is just plain laziness, right below reactor-core is reactor-extra, why wouldn't the Spring developers make extra pull in the same version of core? See: https://search.maven.org/artifact/io.projectreactor.addons/reactor-extra/3.4.3/jar

虽然这是一个需要解决的小问题,但它不应该是我的问题。我是否遗漏了什么,或者这就是它的方式,我不应该期待更多?

首先,您需要查看 this compatibility matrix 云和启动依赖项之间的关系。然后,您需要(例如)生成您的 bom,您在其中导入

这些 boms,在内部,要么导入 other boms,例如 consul, the one you are interested in,版本为 2.2.8.RELEASE。查看该文件中的 properties 标记并看到:

<spring-cloud-consul.version>2.2.8.RELEASE</spring-cloud-consul.version>

具体来说:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-consul-dependencies</artifactId>
    <version>${spring-cloud-consul.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

然后您可以查看 at the specific consul bom 并看到版本 consul-discovery 是:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    <version>${project.version}</version>
</dependency>

相同的模式可以找出反应器依赖项的版本。


从我投入的 10 分钟来看,我没有看到 spring-cloud-starter-consul-discovery:3.0.3 的版本会包含在 cloud-dependecies 中。

您可以仍然尝试强制使用特定版本的依赖项。我们最近 had such a problem in spring-cloud-kubernetes, internally.

虽然这可能有效也可能无效。