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

时间:2013-03-14 17:03:57

标签: maven snapshot rc versions-maven-plugin

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

我有一个依赖

group:artifact:1.1.0-SNAPSHOT

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

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 );
  }
}

这对我来说似乎有些不对劲。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

Maven版本号包含如下:

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

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

请注意,a.b.c-RC1-SNAPSHOT将被视为早于a.b.c-RC1

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

答案 1 :(得分:1)

规范仅适用于major.minor.increment-qualifier,并且通过lexigographical顺序进行比较,独立于beeing snapshot或其他任何内容。

我最终分配了maven-versions-plugin并实现了我自己的版本方案,该方案认为候选版本的快照版本总是比版本候选版本本身更早。

这个实现起来并不太难,我从

扩展而来
org/codehaus/mojo/versions/ordering/MavenVersionComparator 

并由

中声明
org/codehaus/mojo/versions/ordering/VersionComparators.java

并实施了我自己的业务逻辑

答案 2 :(得分: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 的“尚未发布”版本。