当从API包中版本为1.0.0的包开始时,在向所述包添加新接口之后,新版本应该是什么?白纸就兼容性问题发表了以下声明:
很明显,二进制兼容性在向后兼容性中起着重要作用。然而,向后兼容性也非常依赖于语义。如果接口的责任发生变化,它仍然可以是二进制兼容的,但不再是向后兼容的。
同时……
3.微观-微观部分的差异并不意味着任何向后兼容性问题。
一个新的接口不会导致它的提供程序有任何类型的二进制不兼容--完全有可能忽略一个实现。这是否被认为是包语义上的“向后不兼容”更改?这是否意味着新版本应该是1.1.0?
发布于 2013-03-18 07:38:54
向包添加接口至少是一个微小的更改(1.2.3 -> 1.3.0),因为您破坏了API的提供程序(在OSGi中是一个包),API的提供程序实际上没有向后兼容性,因为它们提供了API。毕竟,API中的任何新义务都需要一些新代码。
现在假设您让使用者有义务在API中实现这个新接口。此更改(对编译器不可见)显然破坏了所有现有的使用者,因此对每个人来说都是一个突破性的更改(例如1.2.3 -> 2.0.0)。
最后:
发布于 2013-03-18 07:06:13
语义版本化的确提到:
如果在公共API中引入了任何向后不兼容的更改,则必须增加主版本
X(X.y.z区X > 0)。
如果新接口只调用几个旧接口(现在链接成一个新操作),那么添加的新接口应该被认为在语义上向后兼容。
在这种情况下,一个次要的版本增量就足够了。
https://stackoverflow.com/questions/15471196
复制相似问题