6

私の目標は、単一の依存関係を持つプロジェクトをリリースすることです。スナップショット バージョンとリリース バージョンの両方を展開する nexus リポジトリがあります。

私が持っている1つの依存関係は

group:artifact:1.1.0-SNAPSHOT

そして、次のリリース候補が私の nexus リポジトリでリリースされます

group:artifact:1.1.0-RC1

バージョン プラグインに依存関係を解決するように依頼すると、新しい依存関係が利用できないと主張します。だから彼はそれを考える

1.1.0-SNAPSHOT > 1.1.0-RC1

ただし、私のプロジェクトにバージョン 1.0.0-SNAPSHOT がある場合、バージョン 1.1.0-RC1 が最新バージョンとして解決されます。

私は何が欠けていますか?(プラグインのソースを調べたところ、次のスニペットがあります。

String otherQualifier = otherVersion.getQualifier();

if ( otherQualifier != null )
{
  if ( ( qualifier.length() > otherQualifier.length() )
      && qualifier.startsWith( otherQualifier ) )
  {
    // here, the longer one that otherwise match is considered older
    result = -1;
  }
  else if ( ( qualifier.length() < otherQualifier.length() )
      && otherQualifier.startsWith( qualifier ) )
  {
    // here, the longer one that otherwise match is considered older
    result = 1;
  }
  else
  {
    result = qualifier.compareTo( otherQualifier );
  }
}

私にはバグがあるようです。何か案が?

4

3 に答える 3

10

Maven のバージョン番号は次のとおりです。

<major version>.<minor version>.<incremental version>-<qualifier>

すべてのバージョン番号が等しい場合、修飾子はアルファベット順に比較されます。「RC1」と「SNAPSHOT」、および「a」と「b」に同じようにソートされます。その結果、「SNAPSHOT」はアルファベット順で大きいため、新しいと見なされます。このページを参考にしてください。

a.b.c-RC1-SNAPSHOTは より古いと見なされることに注意してくださいa.b.c-RC1

解決策として何を提案すればよいかわかりません-これがMavenのバージョン管理の仕組みです。

于 2013-03-14T21:16:41.620 に答える
0

Specs は、スナップショットなどとは関係なく、辞書順で比較された修飾付きの major.minor.increment-qualifier でのみ機能します。

最終的に maven-versions-plugin をフォークし、リリース候補のスナップショット バージョンはリリース候補自体よりも常に古いと見なす独自のバージョン スキームを実装しました。

これを実装するのはそれほど難しくありませんでした。

org/codehaus/mojo/versions/ordering/MavenVersionComparator 

で独自のクラスによって宣言されます

org/codehaus/mojo/versions/ordering/VersionComparators.java

独自のビジネスロジックを実装しました

于 2014-04-01T14:39:53.650 に答える
0

https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm現在

修飾子を持つすべてのバージョンは、修飾子のない同じバージョン (リリース バージョン) より古いです。

例えば:

1.2-beta-2 は 1.2 より古いです。

修飾子フィールドが異なる同一のバージョンは、基本的な文字列比較を使用して比較されます。

例えば:

1.2-beta-2 は 1.2-alpha-6 よりも新しいものです。

Maven は、SNAPSHOT 修飾子を他のすべての修飾子とは異なる方法で扱います。バージョン番号の後に -SNAPSHOT が続く場合、Maven はそれを関連する MajorVersion、MinorVersion、または IncrementalVersion の「まだリリースされていない」バージョンと見なします。

于 2021-05-14T12:53:26.993 に答える