Maven 是一个项目管理工具,每一个项目deploy到repository中之后,都有一个坐标,坐标中就包含一个版本,那个版本将是咱们进行版本控制管理的一个重点。安全
一个产品实际可能包含10几个模块,模块间会有依赖关系,因此在项目管理中常常听到这种抱怨:maven
“测试环境又发不了券了?”工具
“是谁又把个人jar包覆盖了?”测试
“这个功能测试环境都测试好了,到了预生产怎么又不行了?”版本控制
“jar包又被哪一个傻X覆盖了?”blog
这些基本上都是由于实际研发过程当中版本管理混乱或者几乎没有版本管理形成的,有的是直接就一个版本用到底,全部环境都用一个版本,常常是还没上线的代码deploy到repository中,致使线上其余模块发布出现了问题。继承
你们能够想象一下,一个项目中可能有10几个模块,每一个模块都有依赖的模块,不管是哪套环境,任何一次deploy均可能影响到其余的环境,这是多么恐怖的事情。因此,“稳定大于一切”,“应该给研发人员和测试人员应有的安全感!”接口
如何在maven中进行这个版本的控制呢?如何解决这些问题呢?项目管理
1.版本统一进行定义管理开发
定义一个统一的父pom项目,该项目只进行版本的管理,其余全部的模块的版本都在父pom中配置管理,一个模块依赖其余模块时统一继承父pom中的版本。
定义好每一个迭代周期的版本后,统一修改父pom的版本,父pom中定义好各个环境的profile,不一样的环境使用不一样的profile。
每定义一个版本时,须要同时定义各个模块的版本号,定义好之后,更新父pom的版本号,须要使用模块新特性的就更新父pom的版本,这样就保证版本可以统一进行管理。以下图父pom项目中1.0.3版本的对应的user是1.0.2版本,order是1.0.1版本,pay是1.0.3版本。若是下一次要进行新功能开发,user修改版本为1.1.0,其余模块接口不变,那么父pom就须要进行版本升级为1.1.0,pay依赖user模块1.1.0版本就须要更新父pom的版本号。
父pom项目统一由管理员进行控制管理,每次版本修改都由管理进行发布管理。
2.支持多套环境的版本切换
maven仓库支持snapshot版本和release版本,研发环境和测试环境可使用snapshot版本进行发布,研发环境和测试环境属于高频deploy执行的,因此保证不更新版本号每次deploy后maven打包时会更新依赖,正式环境使用relase版本,若是须要升级就更新版本号。
3.支持多版本同时存在
每一个项目能够发布多个版本,不一样的版本能够被不一样的模块依赖,可以各取所需,好比,user模块有1.0.1-release版本和1.0.3-release版本,这两个版本能够被不一样的模块引用,只有须要1.0.3-release新特性的模块才对应更新父pom的版本。
以上就是我在项目管理中实际使用maven进行版本控制的经验。