0

我即将在 Maven Central 中部署一个库“A”,我目前以两种可互换但不兼容的配置发布该库“A”。一种配置功能齐全,另一种更可能在“应用商店”中被接受。两者之间的选择最好由应用程序开发人员做出。然而,应用程序开发人员不太可能直接使用“A”。

我知道的替代方案是:(1)使两个配置不同的工件“A1”和“A2”和(2)部署为单个工件“A”并使用分类器来区分这两种配置。

当我考虑下一步时,这个问题变得更加有趣,即部署一个依赖于库“A”的库“B”。库“B”与库“A”的任一配置兼容,那么它应该依赖什么?

我要避免的情况是部署两个版本的“B”,“B 使用 A1”和“B 使用 A2”,因为这只是组合爆炸的开始。

4

1 回答 1

0

库“B”与库“A”的任一配置兼容

听起来两个版本的库 A 共享一个稳定的 API。我会遵循类似于SLF4J使用的模式:发布一个 API 工件,然后分别发布两个配置,然后依赖并实现 API。

那么它[库B]应该依赖什么?

推迟选择。取决于您的 A API 工件,并让 B 的使用者选择要加载的 A 实现。

您可以根据实际情况采取此措施。SLF4J 在找不到任何实现或找到太多实现时会引发运行时警告。您也可以在使用 B 的指南中记录图书馆用户选择和提供 A 实现的责任。

于 2020-09-21T21:53:45.490 回答