maven的版本控制

转载 2012年03月30日 14:23:31

1.项目版本

主版本。次版本。增量版本-限定版本号
<major version>.<minor version>.<incremental version>-<qualifier>
例如,版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。

 

2.版本构建号

我们还需要对版本号的限定版本进行排序。以版本号“1.2.3-alpha-2”和“1.2.3-alpha-10”为例,这里“alpha-2”对应了第二次alpha构建,而“alpha-10”对应了第十次alpha构建。虽然“alpha-10”应该被认为是比“alpha-2”更新的构建,但Maven排序的结果是“alpha-10”比“alpha-2”更旧。Maven会将限定版本后面的数字认作一个构建版本。换句话说,这里限定版本是“alpha”,而构建版本是2。虽然Maven被设计成将构建版本和限定版本分离,但目前这种解析还是失效的。因此,“alpha-2”和“alpha-10”是使用字符串进行比较的,而根据字母和数字“alpha-10”在“alpha-2”前面。要避开这种限制,你需要对你的限定版本使用一些技巧。如果你使用“alpha-02”和“alpha-10”,这个问题就消除了,一旦Maven能正确的解析版本构建号之后,这种工作方式也还是能用。

 

3.SNAPSHOT版本

Maven版本可以包含一个字符串字面量来表示项目正处于活动的开发状态。如果一个版本包含字符串“SNAPSHOT”,Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC(协调世界时)。例如,如果你的项目有个版本为“1.0-SNAPSHOT”并且你将这个项目的构件部署到了一个Maven仓库,如果你在UTC2008年2月7号下午11:08部署了这个版本,Maven就会将这个版本展开成“1.0-20080207-230803-1”。换句话说,当你发布一个snapshot,你没有发布一个软件模块,你只是发布了一个特定时间的快照版本。那么为什么要使用这种方式呢?SNAPSHOT版本在项目活动的开发过程中使用。如果你的项目依赖的一个组件正处于开发过程中,你可以依赖于一个SNAPSHOT版本,在你运行构建的时候Maven会定期的从仓库下载最新的snapshot。类似的,如果你系统的下一个发布版本是“1.4”你的项目需要拥有一个“1.4-SNAPSHOT”的版本,之后它被正式发布。作为一个默认设置,Maven不会从远程仓库检查SNAPSHOT版本,要依赖于SNAPSHOT版本,用户必须在POM中使用repository和pluginRepository元素显式的开启下载snapshot的功能。当发布一个项目的时候,你需要解析所有对SNAPSHOT版本的依赖至正式发布的版本。如果一个项目依赖于SNAPSHOT,那么这个依赖很不稳定,它随时可能变化。发布到非snapshot的Maven仓库(如http://repo1.maven.org/maven2)的构件不能依赖于任何SNAPSHOT版本,因为Maven的超级POM对于中央仓库关闭了snapshot。SNAPSHOT版本只用于开发过程。

 

4.LATEST 和 RELEASE 版本

当你依赖于一个插件或一个依赖,你可以使用特殊的版本值LATEST或者RELEASE。LATEST是指某个特定构件最新的发布版或者快照版(snapshot),最近被部署到某个特定仓库的构件。RELEASE是指仓库中最后的一个非快照版本。总得来说,设计软件去依赖于一个构件的不明确的版本,并不是一个好的实践。如果你处于软件开发过程中,你可能想要使用RELEASE或者LATEST,这么做十分方便,你也不用为每次一个第三方类库新版本的发布而去更新你配置的版本号。但当你发布软件的时候,你总是应该确定你的项目依赖于某个特定的版本,以减少构建的不确定性,免得被其它不受你控制的软件版本影响。如果无论如何你都要使用LATEST和RELEASE,那么要小心使用。Maven 2.0.9之后,Maven在超级POM中锁住了一些通用及核心Maven插件的版本号,以将某个特定版本Maven的核心Maven插件组标准化。这个变化在Maven 2.0.9中被引入,为Maven构建带来了稳定性和重现性。在Maven 2.0.9之前,Maven会自动将核心插件更新至LATEST版本。这种行为导致了很多奇怪现象,因为新版本的插件可能会有一些bug,甚至是行为变更,这往往使得原来的构建失败。当Maven自动更新核心插件的时候,我们就不能保证构建的重现性,因为插件随时都可能从中央仓库更新至一个新的版本。从Maven 2.0.9开始,Maven从根本上锁住了一组核心插件的版本。非核心插件,或者说没有在超级POM中指定版本的插件仍然会使用LATEST版本去从仓库获取构件。由于这个原因,你在构件中使用任何一个自定义非核心插件的时候,都应该显式的指定版本号。


Maven实战摘选

Maven详解之------maven版本管理

使用Maven进行项目的版本管理,以及注意事项
  • wanghantong
  • wanghantong
  • 2014年11月18日 00:10
  • 48161

Maven最佳实践:版本管理

什么是版本管理         首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解sub...
  • Shirley_John_Thomas
  • Shirley_John_Thomas
  • 2016年09月20日 17:42
  • 2008

maven+svn版本控制详谈

LZ最近在公司里开发一套公司自己的项目框架,并且封装了一些类库,采用的是maven来构建项目,每个项目都会涉及到版本的更新,maven项目一般的升级步骤是:         1、通过mvn deplo...
  • lynnlovemin
  • lynnlovemin
  • 2016年10月12日 13:37
  • 4271

Maven学习(十八)-- Maven最佳实践:版本管理

找到了一篇博客,很多啊,是讲Maven中的版本管理的,很好,分享一下, 原文作者:juvenshun 原文地址:http://juvenshun.iteye.com/blog/...
  • m261030956
  • m261030956
  • 2015年06月13日 12:57
  • 642

maven依赖的版本管理

使用变量进行管理 定义一个版本号的变量 4.3.7.REALEASE 所有spring的jar版本都使用变量来定义版本: org.springframework spring...
  • hj7jay
  • hj7jay
  • 2017年03月08日 09:35
  • 680

Maven学习总结(24)——Maven版本管理详解

现在所说的maven版本不同于SVN和git的版本控制哦!!! 之前我们说过Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习。而所说的稳定版本,理想状态下是项目到...
  • u012562943
  • u012562943
  • 2016年08月30日 14:36
  • 2306

Maven慕课网教程笔记

一、maven常用命令 mvn -v 查看maven版本 mvn compile 编译mvn test 测试mvn package 打包mvn clean 删除targetmvn inst...
  • shmilxu
  • shmilxu
  • 2017年01月21日 17:07
  • 498

由git版本控制maven管理的简单web…

个人实践整理,
  • u010913443
  • u010913443
  • 2016年04月11日 17:26
  • 1971

maven版本控制实现自动化管理JAR

解决maven deploy可生成版本号带最新时间戳的问题 解决项目自动化管理(reimport)JAR下载私服上最新版本的JAR的问题 /** *@Author: ludezh *@Rema...
  • qq_28455613
  • qq_28455613
  • 2017年08月14日 13:52
  • 395

版本控制工具:SVN和Maven的区别

构建工具—maven,版本控制工具—svn。 一、只有svn的情况         首先考虑没有maven的情况。这样的话,项目组每个开发人员,都需要在本地check out所有的源码...
  • qq_37402404
  • qq_37402404
  • 2017年05月16日 18:35
  • 2844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:maven的版本控制
举报原因:
原因补充:

(最多只允许输入30个字)