31

<version>[1.2.3,)</version>Mavenには、すべてのオープンソースパッケージが従う一貫したバージョン管理スキームがない場合に、Mavenが新しいバージョンまたは古いバージョンをどのように把握するかなど、さまざまなバージョンを示す機能があるようです。例えば

  • junit4.10
  • slf4j1.7.2
  • Hibernate4.1.7.Final
  • バネ3.1.2.RELEASE

Mavenは、Mavenのパッケージの古いバージョンと新しいバージョンをどのように判断しますか?パッケージがA、B、CまたはA2、A2、A4...などの線に沿ってバージョン番号として文字を使用する場合はどうなりますか。

Mavenでパッケージをバージョン管理するための標準的な公式の方法があるはずですか?SpringやHibernateのような一般的なオープンソースパッケージは、このバージョン管理規則を無視していますか?

4

3 に答える 3

51

バージョン 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

于 2015-07-17T18:32:17.717 に答える