我应该在依赖更新中增加主要版本吗

时间:2018-08-10 06:47:29

标签: java maven compatibility backwards-compatibility semantic-versioning

我知道类似的问题是asked before,但是出于某种原因,我在这个问题上特别添加了maven标签。场景:

  • 项目P有两个依赖项,D1-1.2.3D2-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项目?

1 个答案:

答案 0 :(得分:1)

在这种情况下,更改是否兼容,完全取决于API 消费者的使用方式,这超出了API开发人员的责任。

D1的开发人员而言,公共API保持不变,而IMO,指出这不是重大变化是正确的。

如果使用D1的应用程序也直接使用D2,因为它恰好是编译范围的依赖项,那么这完全是消费者的责任。怎么样?消费者无论如何都可以排除传递依赖,并用其他版本替换它,并且多个消费者对传递依赖的管理也不同。

您已经说过,这大部分是依赖关系在Maven或Java中如何工作的结果,但是将API开发人员的责任限制为公共API是明智的。