6

我的目标是发布一个具有单一依赖项的项目。我有一个 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 );
  }
}

这对我来说似乎是错误的。任何的想法?

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

规范仅适用于major.minor.increment-qualifier,通过字典顺序比较合格,独立于beeing快照或其他。

我最终派生了 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 回答