2013-03-14 131 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 

通过自己的类中声明和实现我自己的业务逻辑

相关问题