首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API束的语义版本化

API束的语义版本化
EN

Stack Overflow用户
提问于 2013-03-18 06:53:23
回答 2查看 490关注 0票数 3

当从API包中版本为1.0.0的包开始时,在向所述包添加新接口之后,新版本应该是什么?白纸就兼容性问题发表了以下声明:

很明显,二进制兼容性在向后兼容性中起着重要作用。然而,向后兼容性也非常依赖于语义。如果接口的责任发生变化,它仍然可以是二进制兼容的,但不再是向后兼容的。

同时……

3.微观-微观部分的差异并不意味着任何向后兼容性问题。

一个新的接口不会导致它的提供程序有任何类型的二进制不兼容--完全有可能忽略一个实现。这是否被认为是包语义上的“向后不兼容”更改?这是否意味着新版本应该是1.1.0?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-18 07:38:54

向包添加接口至少是一个微小的更改(1.2.3 -> 1.3.0),因为您破坏了API的提供程序(在OSGi中是一个包),API的提供程序实际上没有向后兼容性,因为它们提供了API。毕竟,API中的任何新义务都需要一些新代码。

现在假设您让使用者有义务在API中实现这个新接口。此更改(对编译器不可见)显然破坏了所有现有的使用者,因此对每个人来说都是一个突破性的更改(例如1.2.3 -> 2.0.0)。

最后:

  • 微更改->向后兼容现有的API提供者和使用者
  • ->现有的API提供程序不兼容,但使用者是
  • ->现有提供者和使用者不再兼容的主要更改
票数 8
EN

Stack Overflow用户

发布于 2013-03-18 07:06:13

语义版本化的确提到:

如果在公共API中引入了任何向后不兼容的更改,则必须增加主版本X (X.y.zX > 0)。

如果新接口只调用几个旧接口(现在链接成一个新操作),那么添加的新接口应该被认为在语义上向后兼容。

在这种情况下,一个次要的版本增量就足够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15471196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档