我应该增加依赖更新的主要版本吗
Should I increase major version on dependency update
我知道类似的问题已经 asked before,但出于某种原因,我在这个问题上特别包含了 maven
标签。场景:
- 项目
P
有两个依赖项,D1-1.2.3
和 D2-2.0.0
D1-1.2.3
有 D2-1.0.0
作为依赖项
-
D1
中的 class C
使用(但不公开)来自 D2
的 class 与版本 1.0.0
到 2.0.0
P
使用 C
maven 依赖模型规定,由于 P
的 pom.xml
明确声明了 D2
依赖,因此将使用 pom 中的版本。这导致 P
由于传递依赖项的不兼容更改而因链接错误而中断。
semver FAQ 指出这是一个兼容的更改。它确实说 "since it does not affect the public API",但在我概述的场景中, 对依赖项的每个 更新都隐含地存在因链接错误而破坏消费者的风险。
应该D1
增加主要版本吗?由于依赖模型,semver 规范的这一点是否根本不适用于 maven 项目?
变化是否兼容,在这种情况下,完全取决于API 消费者如何使用它,这超出了API 消费者的责任范围API 开发者。
就 D1
的开发人员而言,public API 保持不变,而且,IMO,声明这不是重大更改是正确的。
如果使用D1
的应用程序也直接使用D2
因为它恰好是编译范围的依赖,那么这完全是责任消费者。如何?消费者无论如何都可以排除传递依赖并将其替换为不同的版本,并且多个消费者以不同的方式管理传递依赖。
正如您所说,这大部分是 Maven 或 Java 中依赖项工作方式的结果,但将 API 开发人员的责任限制在 public API.
我知道类似的问题已经 asked before,但出于某种原因,我在这个问题上特别包含了 maven
标签。场景:
- 项目
P
有两个依赖项,D1-1.2.3
和D2-2.0.0
D1-1.2.3
有D2-1.0.0
作为依赖项-
D1
中的 classC
使用(但不公开)来自D2
的 class 与版本1.0.0
到2.0.0
P
使用C
maven 依赖模型规定,由于 P
的 pom.xml
明确声明了 D2
依赖,因此将使用 pom 中的版本。这导致 P
由于传递依赖项的不兼容更改而因链接错误而中断。
semver FAQ 指出这是一个兼容的更改。它确实说 "since it does not affect the public API",但在我概述的场景中, 对依赖项的每个 更新都隐含地存在因链接错误而破坏消费者的风险。
应该D1
增加主要版本吗?由于依赖模型,semver 规范的这一点是否根本不适用于 maven 项目?
变化是否兼容,在这种情况下,完全取决于API 消费者如何使用它,这超出了API 消费者的责任范围API 开发者。
就 D1
的开发人员而言,public API 保持不变,而且,IMO,声明这不是重大更改是正确的。
如果使用D1
的应用程序也直接使用D2
因为它恰好是编译范围的依赖,那么这完全是责任消费者。如何?消费者无论如何都可以排除传递依赖并将其替换为不同的版本,并且多个消费者以不同的方式管理传递依赖。
正如您所说,这大部分是 Maven 或 Java 中依赖项工作方式的结果,但将 API 开发人员的责任限制在 public API.