是否可以为使用不同版本Spring的项目编写库?

Is it possible to write lib for projects using different versions of Spring?

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

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

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

Sleuth 2.2.x (Hoxton) 使用 Brave 的 API(顺便说一句,2.x 不再受支持,您应该升级)。 Sleuth 3.0.x(2020.0.x aka Ilford)和 3.1.x(2021.0.x aka Jubilee)有自己的 API,他们抽象了示踪剂库。您可以使用这些 interfaces/classes 来检测版本并以不同方式配置它们,但是当您编译库时,您可能会遇到类路径问题,因为您有 2.2.x、3.0.x 和 3。 1.x 在你的类路径上。

你可以做的另一件事是模块化你的库,把所有那些不依赖于 Spring 的东西放到一个“核心”模块中,然后为 adapter/autoconfiguration/starter 的每个版本创建更小的模块。 =35=]你要支持的云