簡體   English   中英

Maven 版本發布候選和快照

[英]maven versions release candidates and snapshot

我的目標是發布一個具有單一依賴項的項目。 我有一個 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 );
  }
}

這對我來說似乎有問題。 任何的想法?

Maven 版本號組成如下:

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

如果所有版本號都相等,則按字母順序比較限定符。 "RC1" 和 "SNAPSHOT" 與 "a" 和 "b" 的排序沒有區別。 因此,“SNAPSHOT”被認為是較新的,因為它在字母順序上更大。 請參閱此頁面作為參考。

請注意, abc-RC1-SNAPSHOT將被視為比abc-RC1更舊。

我不確定建議什么作為解決方案 - 這就是 Maven 版本控制的工作方式。

規范僅適用於按字典順序進行比較的 Major.minor.increment-qualifier,獨立於 beeing 快照或其他任何內容。

我最終分叉了 maven-versions-plugin 並實現了我自己的版本方案,該方案認為候選版本的快照版本總是比候選版本本身舊。

這並不太難實現,我從

org/codehaus/mojo/versions/ordering/MavenVersionComparator 

並由自己的類聲明

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

並實現了我自己的業務邏輯

截至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 的“尚未發布”版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM