2013-03-14 164 views
5

我的目標是發佈一個具有單一依賴項目。我有一個nexus存儲庫,我部署了快照和發佈版本。maven版本發佈候選和快照

的一個依賴我有

group:artifact:1.1.0-SNAPSHOT 

和以下發行的候選人是在我的Nexus回購釋放

group:artifact:1.1.0-RC1 

問到版本插件來解決依賴性時,它聲稱沒有新的依賴關係是可用的。因此,他認爲,

1.1.0-SNAPSHOT > 1.1.0-RC1 

然而,如果在我的項目,我有版本1.0.0-快照版本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); 
    } 
} 

這似乎是車對我的任何想法

回答

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版本控制的工作原理。

+0

提供的鏈接,幫助了很多,謝謝 – mirlitone 2013-03-27 13:12:15

+0

這只是一半正確的,因爲SNAPSHOT是一個特殊的限定符,在你描述的過程之外由maven處理。請參閱:https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401 – 2017-05-09 16:11:05

1

規格只能與major.minor.increment-qualifier一起使用,並且與詞法順序進行比較,與beeing快照或其他方式無關。

我結束了分叉maven-versions-plugin並實現我自己的版本方案,認爲發佈候選版本的快照版本總是比發佈候選版本本身更老。

這不是太難實現,我從

org/codehaus/mojo/versions/ordering/MavenVersionComparator 

擴展和

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

通過自己的類中聲明和實現我自己的業務邏輯

相關問題