バージョン 3.0 以降、Maven は一貫したシステムを使用して、個々のバージョンとバージョン範囲の両方のバージョン番号を比較します。いくつかの落とし穴を理解すれば、このシステムは非常に理にかなっています。
すべての比較はComparableVersionによって行われるようになりました。
-' ' (ダッシュ) と ' .' (ドット) セパレータの混合、
- 文字と数字の間の遷移もセパレータを構成します:
1.0alpha1=>[1, 0, alpha, 1]
- 無制限の数のバージョン コンポーネント、
- テキスト内のバージョン コンポーネントは、数字または文字列にすることができます。
- 文字列は既知の修飾子についてチェックされ、修飾子の順序はバージョンの順序付けに使用されます。既知の修飾子 (大文字と小文字を区別しない) は次のとおりです。
alphaまたa
betaまたb
milestoneまたm
rcまたcr
snapshot
- (空の文字列) または
gaまたはfinal
sp
- 未知の修飾子は、既知の修飾子の後に考えられ、語彙の順序 (常に大文字と小文字を区別しない)、
- 通常、ダッシュは修飾子の前にあり、ドットが前にあるものよりも常に重要ではありません。
これは、バージョンが次の順序で出てくることを意味します。これは、真ん中の 1.0-SNAPSHOT を除いて、完全に理にかなっていると思います。
1.0-beta1-SNAPSHOT
1.0-beta1
1.0-beta2-SNAPSHOT
1.0-rc1-SNAPSHOT
1.0-rc1
1.0-SNAPSHOT
1.0
1.0-sp
1.0-whatever
1.0.1
これらすべてで私が見つけた主な落とし穴は、またはの後snapshotに来ることです。そのため、 の開発バージョンを作成してから、またはをリリースし、それらが後であることを Maven に理解させることはできません。 betarc1.0-SNAPSHOT1.0-beta11.0-rc1
また、 は とまったく同じであり、はまたはとまったく1.0-beta-1同じであることに注意してください。1.0beta11.011.0.0
バージョン範囲も (ほぼ) 期待どおりに機能するようになりました。たとえば、 、 、、、または[1.0-alpha-SNAPSHOT,1.0]を検索1.0-beta1-SNAPSHOTし、前の項目よりも後の項目を優先します。これは、M2Eclipse などで完全にサポートされています。1.0-beta11.0-rc1-SNAPSHOT1.0-rc11.0-SNAPSHOT1.0mvn versions:resolve