从 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
我在这一切中发现的主要问题是snapshotor之后, 所以你不能有一个开发版本,然后发布or并且让 Maven 明白那些是后来的。betarc1.0-SNAPSHOT1.0-beta11.0-rc1
另请注意,1.0-beta-1与 完全相同1.0beta1,并且与or1.0完全相同。11.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-SNAPSHOT1.0mvn versions:resolve