【问题标题】:Is it possible to write lib for projects using different versions of Spring?是否可以使用不同版本的 Spring 为项目编写 lib?
【发布时间】:2022-01-21 21:06:06
【问题描述】:

我正在为使用不同版本的 Spring 的项目编写一个库。该库本身也基于 Spring(更准确地说,是 Spring Cloud Sleuth)。目前,我对不同的项目使用不同的版本(版本 1 用于使用 Spring boot 2.0.x 的项目,版本 2 用于使用 Spring boot 2.3.x 的项目等)。显然,维护花费了很多时间并且造成了一些混乱。有没有像 @Conditional 这样的运行时机制,但对于依赖项?

【问题讨论】:

  • 您可以按照提供的方式定义依赖项,这意味着您的 lib 的用户定义了版本,但这可能会根据 Spring Boot 版本之间的差异(兼容性等)产生问题。除此之外,我强烈建议转到更新版本的 spring boot 2.5.X 2.6.X...
  • @khmarbaise 感谢您的建议,但是项目使用的 Spring boot 版本不在我的控制范围内,所以...

标签: spring spring-boot maven spring-cloud-sleuth


【解决方案1】:

首先,查看 Spring Cloud compatibility matrix。可以看到,不同的 Spring Cloud 版本支持不同的 Boot 版本。

我会为您的库做同样的事情并维护它的不同版本。 您可以在 Sleuth 上拥有 optional 依赖项并使用 @Conditional 注释进行设置(例如:@ConditionalOnClass),但我不建议这样做。

Sleuth 2.2.x (Hoxton) 使用 Brave 的 API(btw 2.x 不再受支持,您应该升级)。 Sleuth 3.0.x(2020.0.x aka Ilford)和 3.1.x(2021.0.x aka Jubilee)有自己的 API,它们将跟踪库抽象出来。您可以使用这些接口/类来检测版本并进行不同的配置,但是当您编译库时,您可能会遇到类路径问题,因为您的类路径中有 2.2.x、3.0.x 和 3.1.x。

您可以做的另一件事是将您的库模块化,并将所有不依赖于 Spring 的东西放入“核心”模块中,然后为您想要支持的每个 Spring Cloud 版本创建更小的适配器/自动配置/启动模块。

【讨论】:

  • 谢谢。我会尝试模块化的方式。
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多