相互关联的软件包应该如何进行版本控制



一些开源项目进行组合发布,其中每个包(库)的版本号都增加到相同的版本。

Java中的例子有:

  • org.springframework
  • com.fasterxml.jackson
  • org.hamcrest

这意味着一些包可能会得到一个新版本,即使它们没有改变(也没有改变它们的依赖项)。我不认为这违反了语义版本控制。

我看到的好处是:

  • 用户可以使用单一版本进行监控和升级
  • 所有可能使用相同库组合的用户

缺点:

  • 尽管要下载的包没有更改,但仅使用众多库中一个库的用户可能会收到"更新"通知
  • 如果许多用户只使用一个子包,那么一个版本的所有错误报告在一系列版本中都是相同的,这很难跟踪。恢复到以前的"不同"版本以避免错误变得更加复杂

单一版本控制的一种替代方案是使用BOM(BOM)。存在不同的BOM概念:

  • BOM可以列出要包含在其版本中的几个依赖项(例如Linux apt-Meta包)
  • 如果包含依赖项,BOM可以定义要使用的依赖项的版本(和其他限制)(例如BOM的Java MavendependencyManagement部分)

BOM允许声明库版本的哪个配置(组合)已经一起测试,并允许单独的用户组都使用相同的配置,有助于错误报告和再现性。

然而,并不是所有的软件分发和构建系统都同样支持BOM概念。

最新更新