2

Java ライブラリにセマンティック バージョニング ( http://semver.org/ ) を導入しています。

新しい列挙値の追加をどのように処理する必要がありますか? 私たちの状況は次のとおりです。

  • annotations.jarタイプのプロパティを持つ注釈を含むMyEnum
  • util.jarannotated from を使用して注釈が付けられたオブジェクトがありますannotations.jar
  • wsprovider.jarjaxb のようなテクノロジーを使用して、アノテーション付きオブジェクトをutil.jarWeb API にシリアライズします
  • wsconsumer.jarによって提供される Web API を使用wsprovider.jarし、 の値に基づいて切り替えを行い、MyEnum動作を変更します。

に新しい値を追加する場合MyEnum、さまざまな jar のどの部分 (メジャー/マイナー/パッチ) をバンプする必要がありますか?

util.jarAPI が既存のコードを壊す可能性のある方法で変更されたため、メジャー バージョンを更新する必要があるように思えます。

同じ論理により、これは波及して と の大きな隆起にwsprovider.jarなりwsconsumer.jarます。

annotations.jarメジャー バージョンの更新は必要ですか?

列挙型は値の閉じたセットであるため、はいと言います。そのため、コード ( などwsconsumer.jar) は、列挙型のすべての値をカバーすることで、可能なすべての動作をカバーすることを前提としています。列挙型に新しい値を追加すると、それが壊れます。

しかし、本能的には、列挙型に単一の値を追加するのは少し多すぎるように思われ、かなりの波及効果があります。

これは、semverに慣れる必要があるだけだと思いますか?

4

1 に答える 1

1

Adding new functionality like adding a new enum constant, in your case, rarely breaks backward compatibility of the public API. I believe the most harm it might cause to the public API is making some other enum constant deprecated, which will only result in a minor version bump as specified in the SemVer (FAQ: How should I handle deprecating functionality?). So you might want to reconsider if adding the new enum constant really does break the existing code, because I don't see how it could.

Regarding your dependencies, there's another FAQ question which might be of interest to you: What should I do if I update my own dependencies without changing the public API?.

One thing to remember is that incrementing the major version is mostly about breaking the backward compatibility of the public API, which usually is followed by changing the existing code as opposed to adding a new piece of code. The other thing to remember is that every dependency has its own public API.

于 2013-12-17T10:56:38.400 に答える