从 3.0 版开始,Maven 使用一致的系统来比较各个版本和版本范围的版本号。一旦您了解了一些陷阱,该系统现在就很有意义了。
现在所有比较都由ComparableVersion完成,它说:
- '
-
'(破折号)和' .
'(点)分隔符的混合,
- 字符和数字之间的转换也构成了分隔符:
1.0alpha1
=>[1, 0, alpha, 1]
- 无限数量的版本组件,
- 文本中的版本组件可以是数字或字符串,
- 检查字符串是否有众所周知的限定符,并且限定符排序用于版本排序。众所周知的限定符(不区分大小写)是:
alpha
或者a
beta
或者b
milestone
或者m
rc
或者cr
snapshot
- (空字符串)或
ga
或final
sp
- 在已知限定符之后考虑未知限定符,具有词法顺序(始终不区分大小写),
- 破折号通常在限定符之前,并且总是不如以点开头的东西重要。
这意味着版本按以下顺序出现,我认为这很有意义,除了中间的 1.0-SNAPSHOT:
1.0-beta1-SNAPSHOT
1.0-beta1
1.0-beta2-SNAPSHOT
1.0-rc1-SNAPSHOT
1.0-rc1
1.0-SNAPSHOT
1.0
1.0-sp
1.0-whatever
1.0.1
我在这一切中发现的主要问题是snapshot
or之后, 所以你不能有一个开发版本,然后发布or并且让 Maven 明白那些是后来的。beta
rc
1.0-SNAPSHOT
1.0-beta1
1.0-rc1
另请注意,1.0-beta-1
与 完全相同1.0beta1
,并且与or1.0
完全相同。1
1.0.0
版本范围现在(几乎)也可以按照您期望的方式工作。例如,[1.0-alpha-SNAPSHOT,1.0]
将找到1.0-beta1-SNAPSHOT
、1.0-beta1
、1.0-rc1-SNAPSHOT
、或1.0-rc1
,更喜欢后面的项目而不是前面的项目。M2Eclipse 等完全支持这一点。1.0-SNAPSHOT
1.0
mvn versions:resolve