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 - 我正在尝试加入:
- spring-cloud-starter-consul-discovery:3.0.3
- 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)。清单还在继续......
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+?
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.
虽然这可能有效也可能无效。
我正在尝试更新一个已经安装在厨房水槽中的应用程序(或者可能有几个,它们是在臀部连接的)并且我正在对版本冲突进行排序。
我想更新到 Spring Boot 2.5+ 并使用 Spring Cloud Consul - 我正在尝试加入:
- spring-cloud-starter-consul-discovery:3.0.3
- 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)。清单还在继续......
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+?
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.
虽然这可能有效也可能无效。