到目前为止,读者应该已经清楚了解了快照版和发布版的区别。现在再深入看一下1.0、1.1、1.2.1、3.0-beta这样的版本号后面又遵循了怎样的约定。了解了这样的约定之后,就可以正确地为自己的产品或者项目定义版本号,而你的用户也能了解到隐藏在版本号中的信息。
看一个实际的例子,这里有一个版本:
1.3.4-beta-2
这往往表示了该项目或产品的第一个重大版本的第三个次要版本的第四次增量版本的beta-2里程碑。很拗口?那一个个分开解释:“1”表示了该版本是第一个重大版本;“3”表示这是基于重大版本的第三个次要版本;“4”表示该次要版本的第四个增量;最后的“beta-2”表示该增量的某一个里程碑。
也就是说,Maven的版本号定义约定是这样的:
<主版本>.<次版本>.<增量版本>-<里程碑版本>
主版本和次版本之间,以及次版本和增量版本之间用点号分隔,里程碑版本之前用连字号分隔。下面解释其中每一个部分的意义:
·主版本:表示了项目的重大架构变更。例如,Maven 2和Maven 1相去甚远;Struts 1和Struts 2采用了不同的架构;JUnit 4较JUnit 3增加了标注支持。
·次版本:表示较大范围的功能增加和变化,及Bug修复。例如Nexus 1.5较1.4添加了LDAP的支持,并修复了很多Bug,但从总体架构来说,没有什么变化。
·增量版本:一般表示重大Bug的修复,例如项目发布了1.4.0版本之后,发现了一个影响功能的重大Bug,则应该快速发布一个修复了Bug的1.4.1版本。
·里程碑版本:顾名思义,这往往指某一个版本的里程碑。例如,Maven 3已经发布了很多里程碑版本,如3.0-alpha-1、3.0-alpha-2、3.0-beta-1等。这样的版本与正式的3.0相比,往往表示不是非常稳定,还需要很多测试。
需要注意的是,不是每个版本号都必须拥有这四个部分。一般来说,主版本和次版本都会声明,但增量版本和里程碑就不一定了。例如,像3.8这样的版本没有增量和里程碑,2.0-beta-1没有增量。但我们不会看到有人省略次版本,简单地给出主版本显然是不够的。
当用户在声明依赖或插件未声明版本时,Maven就会根据上述的版本号约定自动解析最新版本。这个时候就需要对版本号进行排序。对于主版本、次版本和增量版本来说,比较是基于数字的,因此1.5>1.4>1.3.11>1.3.9。而对于里程碑版本,Maven则只进行简单的字符串比较,因此会得到1.2-beta-3>1.2-beta-11的结果。这一点需要留意。