【问题标题】:Spring Dependency Mess - conflict with Spring Boot 2.5.4 and Spring Cloud 3.0.3Spring Dependency Mess - 与 Spring Boot 2.5.4 和 Spring Cloud 3.0.3 冲突
【发布时间】:2021-10-26 16:27:25
【问题描述】:

我正在尝试更新已经拉入厨房水槽的应用程序(或者可能是一些,它们在臀部加入)并且我正在整理版本冲突。

我想更新到 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-核心:3.4.5)。名单还在继续……

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

  2. https://search.maven.org/artifact/org.springframework.cloud/spring-cloud-loadbalancer/3.0.3/jar - 这对我来说只是单纯的懒惰,在 reactor-core 的正下方是 reactor-extra,为什么 Spring 开发人员不额外引入相同版本的核心?见:https://search.maven.org/artifact/io.projectreactor.addons/reactor-extra/3.4.3/jar

虽然这是一个需要解决的小问题,但它不应该是我的问题。是我遗漏了什么,还是事情就是这样,我不应该期待更多?

【问题讨论】:

  • 你应该通过 boms 来管理这个,而不是明确的。 here 是云和启动版本协同工作的矩阵。
  • spring cloud 2020.0.x同时兼容boot 2.4.x和2.5.x,应该由bom管理。你能显示你的构建依赖文件吗?
  • 我可以,但我的问题更像是一个哲学问题。 BOM 将类似于使用排除项。
  • 甚至没有关闭。您将获得两个 bom,并且从不明确管理任何版本。至少,恕我直言。我们这样做。我们为每个人提供了一个共同的 bom,我们在其中导入了云和启动 bom。
  • 那么,在 BOM 中,我需要为 reactor-extra / reactor-core 声明一个版本吗?我还能如何让它们合并?

标签: java spring-boot maven spring-cloud


【解决方案1】:

首先,您需要查看this compatibility matrix 云和引导之间的依赖关系。然后,您需要(例如)生成 your bom,您在哪里导入

这些 bom 在内部导入 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

不过,这可能有效,也可能无效。

【讨论】:

  • 在这种情况下,我的解决方案确实是使用 BOM;但是,我希望 Spring 能够更好地管理这些依赖关系,因为它应该并且可以保持一致。
  • @Walter 这可能并不容易找到,特别是因为“事情只是工作”很长一段时间。您可以查看this issue,我们遇到了同样的问题。我们修复它的唯一原因是因为有人报告 + 我不得不研究 maven 文档和文档一整天才能弄清楚。有人可能会在 PR 中意外做到这一点,而我们永远不会知道 - 因为事情“正常工作”。情况很复杂。您可以将此问题报告给领事项目或更好,修复它...我没有更好的答案:)
猜你喜欢
  • 2017-11-12
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2015-01-23
相关资源
最近更新 更多