Maven似乎能够指出一系列版本,例如<version>[1.2.3,)</version>当没有所有开源软件包遵循的一致版本控制方案时,maven如何确定什么是新版本或旧版本.例如
4.10 1.7.24.1.7.Final3.1.2.RELEASEmaven如何计算maven中包的旧版和新版?如果包使用字母作为A,B,C或A2,A2,A4 ......等版本的数字,该怎么办?
是否应该有标准的官方方式来版本化maven包?像spring和hibernate这样的常见开源软件包是否忽略了这种版本控制惯例?
Jel*_*aby 41
从版本3.0开始,Maven使用一致的系统来比较各个版本和版本范围的版本号.一旦你理解了一些问题,这个系统现在很有意义.
所有比较现在由ComparableVersion完成,其中说:
- 混合'
-'(短划线)和'.'(点)分隔符,- 字符和数字之间的转换也构成一个分隔符:
1.0alpha1=>[1, 0, alpha, 1]- 无限数量的版本组件,
- 文本中的版本组件可以是数字或字符串,
- 检查字符串是否为已知的限定符,限定符顺序用于版本排序.众所周知的限定符(不区分大小写)是:
alpha要么abeta要么bmilestone要么mrc要么crsnapshot- (空字符串)或
ga或finalsp- 在已知限定符之后考虑未知限定符,具有词法顺序(始终不区分大小写),
- 破折号通常在限定符之前,并且总是不如前面带点的东西重要.
这意味着版本按以下顺序出现,我认为这是完全合理的,除了中间的1.0-SNAPSHOT:
1.0-beta1-SNAPSHOT1.0-beta11.0-beta2-SNAPSHOT1.0-rc1-SNAPSHOT1.0-rc11.0-SNAPSHOT1.01.0-sp1.0-whatever1.0.1我在这一切中发现的主要疑难杂症是snapshot来之后 beta或者rc,所以你不能有一个开发版本1.0-SNAPSHOT,然后释放1.0-beta1或1.0-rc1并有Maven的了解,这些都是以后.
另请注意,1.0-beta-1它与or 完全相同1.0beta1,并且1.0与1or 完全相同1.0.0.
版本范围现在(几乎)按照您期望的方式工作.例如,[1.0-alpha-SNAPSHOT,1.0]会发现1.0-beta1-SNAPSHOT,1.0-beta1,1.0-rc1-SNAPSHOT,1.0-rc1,1.0-SNAPSHOT或1.0,宁愿在早期的后项.mvn versions:resolveM2Eclipse等完全支持这一点.
这是一个直接针对Maven的ComparableVersion类编写的测试。
package org.codehaus.mojo.buildhelper.versioning;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.junit.Assert;
import org.junit.Test;
public class TempTest {
@Test
public void testVersions() {
Assert.assertTrue(new ComparableVersion("1.0-beta1-SNAPSHOT").compareTo(
new ComparableVersion("1.0-beta1")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-beta1").compareTo(
new ComparableVersion("1.0-beta2-SNAPSHOT")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-beta2-SNAPSHOT").compareTo(
new ComparableVersion("1.0-rc1-SNAPSHOT")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-rc1-SNAPSHOT").compareTo(
new ComparableVersion("1.0-rc1")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-rc1").compareTo(
new ComparableVersion("1.0-SNAPSHOT")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-SNAPSHOT").compareTo(
new ComparableVersion("1.0")) < 0);
Assert.assertTrue(new ComparableVersion("1.0").compareTo(
new ComparableVersion("1")) == 0);
Assert.assertTrue(new ComparableVersion("1.0").compareTo(
new ComparableVersion("1.0-sp")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-sp").compareTo(
new ComparableVersion("1.0-whatever")) < 0);
Assert.assertTrue(new ComparableVersion("1.0-whatever").compareTo(
new ComparableVersion("1.0.1")) < 0);
}
}
Run Code Online (Sandbox Code Playgroud)
此测试断言以下版本被 Maven 视为从低到高:
| 归档时间: |
|
| 查看次数: |
7500 次 |
| 最近记录: |