我知道类似的问题是asked before,但是出于某种原因,我在这个问题上特别添加了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
的{{1}}明确声明了pom.xml
依赖关系,因此将使用pom中的版本。由于传递依赖项的不兼容更改,这导致D2
以链接错误中断。
semver FAQ声明这是兼容的更改。它确实说“因为它不会影响公共API”,但是在我概述的情况下,每次更新到依赖项都隐含着因链接错误而破坏使用者的风险。
P
是否应增加主要版本? semver规范的这一部分是否由于其依赖关系模型而根本不适合Maven项目?
答案 0 :(得分:1)
在这种情况下,更改是否兼容,完全取决于API 消费者的使用方式,这超出了API开发人员的责任。
就D1
的开发人员而言,公共API保持不变,而IMO,指出这不是重大变化是正确的。
如果使用D1
的应用程序也直接使用D2
,因为它恰好是编译范围的依赖项,那么这完全是消费者的责任。怎么样?消费者无论如何都可以排除传递依赖,并用其他版本替换它,并且多个消费者对传递依赖的管理也不同。
您已经说过,这大部分是依赖关系在Maven或Java中如何工作的结果,但是将API开发人员的责任限制为公共API是明智的。