[英]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.