java - 我应该增加依赖更新的主要版本吗
问题描述
我知道之前有人问过类似的问题,但我特意maven
在这个问题上加上了标签是有原因的。设想:
- 项目
P
有两个依赖项,D1-1.2.3
并且D2-2.0.0
D1-1.2.3
D2-1.0.0
作为依赖项- 一个使用(但不公开)一个类的类
C
从版本到D1
D2
1.0.0
2.0.0
P
用途C
maven 依赖模型规定,由于P
'pom.xml
明确声明了D2
依赖关系,因此将使用来自 pom 的版本。P
由于传递依赖的不兼容更改,这会导致链接错误中断。
semver FAQ声明这是一个兼容的更改。它确实说“因为它不影响公共 API”,但在我概述的场景中,对依赖项的每次更新都隐含着因链接错误而破坏消费者的风险。
应该D1
增加主要版本吗?由于其依赖模型,这部分 semver 规范是否根本不适合 maven 项目?
解决方案
更改是否兼容,在这种情况下,完全取决于 API使用者如何使用它,这超出了 API 开发人员的责任范围。
就D1
's 的开发人员而言,公共 API 保持不变,而且,IMO 声明这不是重大更改是正确的。
如果使用的应用程序D1
也直接使用D2
,因为它恰好是编译范围的依赖项,那么这完全是消费者的责任。如何?消费者无论如何都可以排除传递依赖并用不同的版本替换它,并且多个消费者以不同的方式管理传递依赖。
正如您所说,这大部分是依赖关系在 Maven 或 Java 中如何工作的结果,但是将 API 开发人员的责任限制在公共 API 上是明智的。
推荐阅读
- docker - 使用无根 docker 创建的绑定挂载在主机上有一个奇怪的 uid。如何删除这些文件夹?
- python - 为什么我的程序不会像我编写的那样过滤掉停用词和标点符号?(Python & NLTK)
- paypal - 如何进行多次付款
- python - “房间”类没有“对象”成员
- node.js - 不和谐音频播放器
- json - 格式化数组/对象时出现 Jq tsv 错误
- django - Django,自定义管理器,base_manager_name 和保存模型失败
- javascript - 为什么图像不显示在浏览器同步上?
- python-3.x - 运行 Pyinstaller exe 时出错(FileNotFoundError:没有这样的文件或目录)
- javascript - 将一系列 URL 字符串转换为 HTML 链接