向枚举添加值时使用java Semver
我们将语义版本控制(http://semver.org/)引入Java库
我们应该如何处理添加新枚举值的问题?我们的情况如下:
annotations.jar
包含具有类型MyEnum
属性的注释util.jar
使用注释自annotations.jar
对对象进行注释wsprovider.jar
使用类似jaxb的技术将util.jar
中的注释对象序列化到web api中wsconsumer.jar
使用wsprovider.jar
提供的web api,并基于MyEnum
的值进行切换以更改其行为李>
如果我们给MyEnum
添加一个新值,我们应该碰撞各种罐子的哪些部分(主要/次要/补丁)
在我看来util.jar
需要升级主要版本,因为API的更改方式可能会破坏现有代码
按照同样的逻辑,这将波及到wsprovider.jar
和wsconsumer.jar
中的一个主要凸起
annotations.jar
是否需要一个主要版本
我会说是,因为枚举是一组封闭的值,所以代码(比如wsconsumer.jar
)假设通过覆盖枚举中的所有值,它覆盖了所有可能的行为。向枚举中添加一个新值,则会中断该操作
然而,从本能上看,向枚举中添加一个值似乎有点过分,而且会产生相当大的连锁反应
我想这只是我们需要习惯塞姆弗的事情
# 1 楼答案
在您的例子中,添加新功能(如添加新的枚举常量)很少会破坏公共API的向后兼容性。我认为,它可能对公共API造成的最大危害是使其他一些枚举常量被弃用,这只会导致SemVer中指定的小版本升级(常见问题解答:我应该如何处理弃用功能?)。因此,您可能需要重新考虑添加新的enum常量是否真的会破坏现有代码,因为我不知道它是如何做到的
关于您的依赖关系,您可能会感兴趣的另一个常见问题是:如果在不更改公共API的情况下更新自己的依赖关系,我应该怎么做
需要记住的一点是,增加主版本主要是为了打破公共API的向后兼容性,之后通常会更改现有代码,而不是添加新代码。另一件需要记住的事情是,每个依赖项都有自己的公共API