バージョン番号の書式
Maven2において、artifactのバージョン番号を扱うためのインタフェースはmaven-artifactモジュールに含まれているorg.apache.maven.artifact.versioning.ArtifactVersionインタフェースである。この実装としてはorg.apache.maven.artifact.versioning.DefaultArtifactVersionが使われる。このクラスを紐解くと、artifactのバージョン番号としてどのような書式が許されるのかが分かる。以下、バージョン番号の書式について解説する。
バージョン番号の書式は次のいずれかである:
- majorVersion [ "." minorVersion [ "." incrementalVersion [ "-" ( buildNumber | qualifier ) ] ] ] ]
- qualifier
- majorVersion、minorVersion、incrementalVersion、buildNumberは、バージョン番号文字列から抽出できなかったものについては値が0であるとみなされる。qualifierは、バージョン番号文字列から抽出できなかった場合はnullとみなされる。
- majorVersion、minorVersion、incrementalVersion、buildNumberは0または0で始まらない正の整数である。0以外では0で始まることは許されないため、例えば「01」などは許されない。
- majorVersion(とminorVersionとincrementalVersion)の直後に「-」buildNumberとして解釈できる数値列が指定された場合はそれはbuildNumberとみなされる。buildNumberとして解釈できない数値列や文字列が指定された場合はそれはqualifierとみなされる。
- 最初の書式に合致しないバージョン番号文字列は全体がqualifierとみなされる。
バージョン番号同士の比較は次のように行なわれる:
- majorVersionが異なるなら、majorVersionが大きいほうが新しい。
- 例:2.0.0 > 1.5.0
- そうでない場合、minorVersionが異なるなら、minorVersionが大きい方が新しい。
- 例:1.2.0 > 1.1.5
- そうでない場合、incrementalVersionが異なるなら、incrementalVersionが大きい方が新しい。
- 例:1.2.5 > 1.2.0
- そうでない場合、qualifierがnull
でないである(=qualifierを持っていない)方が新しい。- 例:1.2.0 > 1.2.0-RC1
- 両方ともqualifierを持っていないなら、buildNumberが大きい方が新しい。
- 例:1.2.0-10 > 1.2.0-5
- 両方ともqualifierを持っているなら、
- qualifierが一致するなら、等しい。
- 例:1.2.0-RC5 = 1.2.0-RC5
- 片方のqualifierがもう片方のqualifierと前方一致するなら、短い方が新しい。
- 例:1.2.0-RC > 1.2.0-RC5
- そうでないなら、qualifier同士を文字列比較した時の順序が大きい方が新しい。
- 例:1.2.0-SNAPSHOT > 1.2.0-RC1
- qualifierが一致するなら、等しい。
ところで、上記のことから1.2.0-RC10 < 1.2.0-RC1であることが分かる(6-2)。また1.2.0-RC10 < 1.2.0-RC2であることが分かる(6-3)。従って、RCは1から9までにしておいた方が無難である。