Maven版本范围,以排除下一个次要版本
我正在使用Maven 3.3.3,我想表示我将接受任何2.7.x版本的Maven版本范围,以排除下一个次要版本,maven,Maven,我正在使用Maven 3.3.3,我想表示我将接受任何2.7.x版本的jackson core依赖项(但在我有机会评估向后兼容性、运行单元/回归测试等之前,我不愿意使用2.8.x) 这将允许我的项目接收bug修复(在增量版本下),但延迟跳转到下一个minor版本,直到准备就绪 我本能地将以下内容写入pom.xml: <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core<
jackson core
依赖项(但在我有机会评估向后兼容性、运行单元/回归测试等之前,我不愿意使用2.8.x)
这将允许我的项目接收bug修复(在增量版本下),但延迟跳转到下一个minor
版本,直到准备就绪
我本能地将以下内容写入pom.xml
:
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>[2.7.1,2.8)</version>
这让我大吃一惊,然而,这导致了描述Maven依赖项排序顺序的“官方”
这些帮助我理解了为什么2.8.0.rc2
被认为比2.8.0
更“老”
因此,我推断以下方法(尽管有些不切实际)将产生预期的结果:
[2.7.1,2.8.0.a)
我错了。dependency:list
现在生成:
com.fasterxml.jackson.core:jackson-core:jar:2.8.0:compile
与相同的结果(或与-a
的变体):
[2.7.1,2.8.a)
总之,这似乎意味着以下顺序:
2.8.0 < 2.8.0.a
2.8.0.rc2 < 2.8.0
2.8.0<2.8.0.a
2.8.0.rc2<2.8.0
所以…如果我在学校学到的关于传递关系的所有知识都是正确的,那么:
2.8.0.rc2 < 2.8.0.a
2.8.0.rc2<2.8.0.a
这似乎与SO的答案相矛盾。同时,Javadoc是不明确的(即,限定符顺序是否列出了实际实现的顺序),并且有点混乱
无论如何,它似乎与字符串排序或“发布候选”(假定的rc
的意思是在指定为a
的alpha版本之前)的常识不符
如果发布了一个实际的2.8.0-alpha
版本,是否会有不同的处理方式
一句话:是否有一种合理的可转移方式来指定Maven版本范围,该范围不包括2.8.0版本空间中的所有内容
编辑:更重要的一点……是否有一个明确的文档记录和公开的Maven版本排序算法描述,而不是源代码?很难说cwiki页面是否是一个理想的规范或实现的(当然没有达到我们在这里探讨的细节级别)Javadoc似乎暗示(但不是毫不含糊地这样说)这里的注释所证明的
和-
之间的相等性并非如此。您可以使用以下命令简单地检查顺序:
java -jar apache-maven-3.3.3/lib/maven-artifact-3.3.3.jar 2.8.0.rc2 2.8.0.a
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.8.0.rc2 == 2.8.0.rc-2
2.8.0.rc2 < 2.8.0.a
2. 2.8.0.a == 2.8.0.a
马文自己说
此外,考虑到对原始问题的评论中所述,我的结论是,在一个更持久的解决方案范围内说明版本号并不是100%安全、可转让的
实际上,我认为作出假设将使其中任何一项在大多数情况下都是有效的:
[2.7.0,2.8.-alpha.alpha)
[2.7.0,2.7.9999.9999]
但从理论上讲,工件的版本号可能总是较小(在第一种情况下)或较大(在第二种情况下)(请注意2.7.9999.9999.9>2.7.9999.9999
)
即使有这些假设,以任何一种方式声明范围都会使生成接受任何发布的2.7.x
版本,例如2.7.1-rc2
我知道我在最初的问题中意识到这是一个隐含的前提。也就是说,要求“接收错误修复(在增量版本下),但延迟跳转到下一个次要版本直到准备就绪”假设“增量版本”只是非alpha、非rc等版本
这个前提是无效的。提供“只有不合格的版本(例如,maj.min.inc
,没有-qualifier
)”似乎不是Maven支持的用例,完全是一个单独的问题
我认为我现在坚定地站在“Maven Ranges is Evil”阵营中……与其说是为了构建的可复制性,不如说是为了能够控制所包含工件的质量/最终性。
[2.7.1,2.8.0-alpha-alpha)
实现了这个技巧……有点小技巧。遗憾的是,它没有实现这个技巧。java-jar${Maven home}/lib/maven-artifact-3.3.3.jar 2.8.0-alpha.alpha.2.8.0-alpha-alpha
(参见@khmarbaise答案)说(部分):2.8.0-alpha.alpha<2.8.0-alpha
…因此有一些东西小于alpha
(注意
分隔符).这感觉像是打了一个摩尔。它变得更有趣了…2.8.0-alpha.alpha>2.8.0-alpha.alpha[.-]alpha
因为Maven认为作为版本号一部分的post-fixed限定符的数量似乎没有限制。这看起来越来越像是的副本。当然,h/t到@khmarbaise可供参考和参考。感谢这个工具提示。它显然对运行一些测试用例很有帮助(见别处)。然而,仍然在寻找关于Maven如何订购版本号的规范答案。
java -jar apache-maven-3.3.3/lib/maven-artifact-3.3.3.jar 2.8.0.rc2 2.8.0-alpha
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.8.0.rc2 == 2.8.0.rc-2
2.8.0.rc2 > 2.8.0-alpha
2. 2.8.0-alpha == 2.8-alpha
[2.7.0,2.8.-alpha.alpha)
[2.7.0,2.7.9999.9999]