【发布时间】:2019-01-17 17:14:44
【问题描述】:
我知道类似的问题是asked before,但出于某种原因,我特意在这个问题上添加了maven 标签。场景:
- 项目
P有两个依赖,D1-1.2.3和D2-2.0.0 -
D1-1.2.3具有D2-1.0.0作为依赖项 -
D1中的类C使用(但不公开)来自D2的类,该类从版本1.0.0到2.0.0发生了重大变化 -
P使用C
maven 依赖模型规定,由于 P 的 pom.xml 明确声明了 D2 依赖,因此将使用来自 pom 的版本。这会导致P 因传递依赖的不兼容更改而因链接错误而中断。
semver FAQ 声明这是一个兼容的更改。它确实说“因为它不影响公共 API”,但在我概述的场景中,每次对依赖项的更新都隐含着因链接错误而破坏消费者的风险。
D1应该增加主版本吗?这部分 semver 规范是否因为其依赖模型而根本不适合 maven 项目?
【问题讨论】:
-
问题是你的类
C(它的接口)是否需要基于传递变化而改变。如果你能保留它。这不是重大更改,因为如果您需要更改“接口”,您的 API 是稳定的,这将是重大更改..并导致主要版本更改...除此之外,我会在您的文件中明确命名版本更改更改日志...
标签: java maven compatibility backwards-compatibility semantic-versioning