release - 应该如何对相互关联的软件包进行版本控制?
问题描述
一些开源项目进行组合发布,其中每个包(库)的版本号增加到相同的版本。
Java 中的示例如下:
- org.springframework
- com.fasterxml.jackson
- org.hamcrest
这意味着一些包可能会获得一个新版本,即使它们没有改变(也没有改变它们的依赖项)。我不认为这违反了语义版本控制。
我看到的好处是:
- 用户可以使用单一版本进行监控和升级
- 所有用户都可能使用相同的库组合
缺点:
- 尽管要下载的包没有更改,但仅使用众多库之一的用户可能会收到有关“更新”的通知
- 如果很多用户只使用一个子包,那么一个版本的所有错误报告都是针对一系列版本的,这很难跟踪。恢复到以前的“不同”版本以避免错误变得更加复杂。
解决方案
单一版本控制的一种替代方法是使用 BOM(材料清单)。存在不同的 BOM 概念:
- BOM 可以列出几个依赖项以包含在它们的版本中(例如Linux apt Meta-packages)
- 如果包含依赖项,BOM 可以定义要使用的依赖项的版本(和其他限制)(例如
dependencyManagement
BOM 的 Java Maven 部分)
BOM 允许声明哪些库版本的配置(组合)已经一起测试,并允许不同的用户组都使用相同的配置,有助于错误报告和可重复性。
不过,并非所有软件分发和构建系统都同样支持 BOM 概念。
推荐阅读
- amazon-web-services - 如何使用 kinesis 视频流制作器(WebRTC)从笔记本电脑的摄像头流式传输视频
- python - Keras ValueError:检查输入时出错:预期 anchor_input 有 3 个维度,但得到的数组形状为 (18, 1)
- spring - java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
- python - 如何以恒定步长填充数组元素之间的间距,并将两个这样的数组与主要和次要优先级结合起来?
- javascript - PHP / Nunjucks webmail 防止 XSS 保留布局
- scala - 如何从数据框行中获取 As[Location]("location")?
- python - 使用 gunicorn+Flask 时 Google Cloud Vision 没有响应
- python - Web自动化脚本效率
- r - 根据变量向数据集添加行
- javascript - NodeJS ES6导入找不到模块