maven版本发布候选版本和快照

mir*_*one 6 snapshot rc maven versions-maven-plugin

我的目标是发布一个具有单一依赖关系的项目.我有一个nexus存储库,我可以部署快照和发布版本.

我有一个依赖

group:artifact:1.1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

以下发布候选版本在我的nexus回购中发布

group:artifact:1.1.0-RC1
Run Code Online (Sandbox Code Playgroud)

当要求版本插件来解决依赖关系时,它声称没有新的依赖项可用.所以他考虑到了

1.1.0-SNAPSHOT > 1.1.0-RC1
Run Code Online (Sandbox Code Playgroud)

但是,如果在我的项目中,我有版本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 );
  }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有些问题.任何的想法?

Dun*_*nes 9

Maven版本号包括如下:

<major version>.<minor version>.<incremental version>-<qualifier>
Run Code Online (Sandbox Code Playgroud)

如果所有版本号都相等,则按字母顺序比较限定符."RC1"和"SNAPSHOT"并且与"a"和"b"的排序没有区别.因此,"SNAPSHOT"被认为是更新的,因为它按字母顺序更大.请参阅此页面作为参考.

请注意,a.b.c-RC1-SNAPSHOT它将被视为比a.b.c-RC1.

我不确定该解决方案的建议 - 这就是Maven版本控制的工作方式.

  • 这只是一半正确,因为 SNAPSHOT 是一个特殊的限定符,由 maven 在您描述的过程之外处理。请参阅:https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401 (4认同)
  • 这个答案在撰写本文时可能是正确的,但 Maven 比较版本的方式自 v3 左右以来已经更新。更多详细信息请参见/sf/ask/910311041/ (2认同)

Ced*_*rix 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 的“尚未发布”版本。