一些开源项目进行组合发布,其中每个包(库)的版本号都增加到相同的版本。
Java中的例子有:
- org.springframework
- com.fasterxml.jackson
- org.hamcrest
这意味着一些包可能会得到一个新版本,即使它们没有改变(也没有改变它们的依赖项)。我不认为这违反了语义版本控制。
我看到的好处是:
- 用户可以使用单一版本进行监控和升级
- 所有可能使用相同库组合的用户
缺点:
- 尽管要下载的包没有更改,但仅使用众多库中一个库的用户可能会收到"更新"通知
- 如果许多用户只使用一个子包,那么一个版本的所有错误报告在一系列版本中都是相同的,这很难跟踪。恢复到以前的"不同"版本以避免错误变得更加复杂
单一版本控制的一种替代方案是使用BOM(BOM)。存在不同的BOM概念:
- BOM可以列出要包含在其版本中的几个依赖项(例如Linux apt-Meta包)
- 如果包含依赖项,BOM可以定义要使用的依赖项的版本(和其他限制)(例如BOM的Java Maven
dependencyManagement
部分)
BOM允许声明库版本的哪个配置(组合)已经一起测试,并允许单独的用户组都使用相同的配置,有助于错误报告和再现性。
然而,并不是所有的软件分发和构建系统都同样支持BOM概念。