【问题标题】:Java library version after methods return type update方法返回类型更新后的 Java 库版本
【发布时间】:2013-10-27 20:30:33
【问题描述】:

我修改了一个 Java 库,将一些方法的返回类型从原始类型更改为等效类(例如从 int 更改为 Integer,从 float 更改为 Float)。库中没有其他更改。

在正常使用中,更改不应改变库行为,因为 Java 会自动对值进行拆箱。否则,如果返回值为null,JVM会抛出异常(目前库在解析阶段抛出异常)。

鉴于当前版本是 1.0.1,我应该将新库发布为 1.1.0 还是 2.0.0?

【问题讨论】:

  • 是否有任何类型的版本控制流程或指南?对我们来说,这样的更改将转到 1.0.2。您要做的最后一件事是开始跳过版本以打破任何现有的一致性。
  • 不,没有流程或指南,这是我在业余时间工作的图书馆。我同意你的评论,我想避免无缘无故地增加版本号。
  • 那么基于您的两个选择,我会选择 1.1.0,因为更改似乎很小。找到这个,可能有用...http://stackoverflow.com/questions/2864448/best-practice-software-versioning

标签: java version versioning


【解决方案1】:

来自书Practical API Design - Confessions of a Java Framework Architect。

如果方法声称在一个版本中返回非空值,则将其更改为返回 null 实际上是一个不兼容的更改,因为这种更改可以从外部观察到,并对组件的用户产生负面的影响。

书中的另一种说法Enterprise Software Architecture and Design Entities, Services, and Resources:

通常,版本标识符包括主要和次要版本号,期望次要版本更新向后兼容与具有相同主要版本 数字。

而在Software versioning - Wikipedia, the free encyclopedia:

原则上,在后续版本中,major 数字会在功能发生重大跳跃时增加,minor 数字会在只有次要功能或重大修复时增加已添加,当小错误被修复时,revision 数字会增加。

【讨论】:

  • 所以你建议选择 2.0.0?
  • 但我的更改并不严格向后兼容,因为可能返回 null 值。
  • 既然你已经有了 1.0.0 和 1.0.1 的版本,那么下一个版本显然是 1.0.2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多