我们已经使用Maven一年半了,但是Maven多项目之间的版本管理还一直没有起色。这里提一提我个人的思路,希望大家能够来完善这个思路。其中 有些借鉴spring security项目的思路(通过浏览其svn各个版本提交记录得来),也没有时间深入研究;如果谁有时间,可以深入研究一番。
以mysoa项目为例,项目开始时,我们应该有这样的项目目录结构:
mysoa-1.0-snapshot
|-- mysoa-core-1.0-snapshot
|-- mysoa-security-1.0-snapshot
|-- mysoa-task-1.0-snapshot
|-- mysoa-attachment-1.0-snapshot
|-- mysoa-email-1.0-snapshot
之所以创建snapshot项目,是因为项目在开发过程中,可能会被其他项目依赖。
这几个项目之间的依赖关系很明显,security依赖于core,而其他几个项目依赖于core和security。
我们首先要稳定的是core项目,假定我们发布mysoa-core-1.0,则项目结构变更为
mysoa-1.0-snapshot
|-- mysoa-core-1.0
|-- mysoa-security-1.0-snapshot
|-- mysoa-task-1.0-snapshot
|-- mysoa-attachment-1.0-snapshot
|-- mysoa-email-1.0-snapshot
这时,所有项目都更改为依赖于mysoa-core-1.0
- 当我们要开始开发mysoa-core-1.1时,我们先将mysoa-core-1.0发布到30.1的repository中,
- 然后将该项目版本改为mysoa-core-1.1-snapshot,其他项目还是依赖于mysoa-core-1.0,这样直到mysoa-core-1.1开发完成并发布。
- 如 果mysoa-core-1.1开发过程中,mysoa-security-1.0-snapshot需要依赖于这个1.1版本,则将security更 改为依赖于mysoa-core-1.1-snapshot,mysoa-core-1.1发布后,可以将这个依赖更改为mysoa-core-1.1。
同样,mysoa-security-1.0发布时,也是先将其版本号的snapshot拿掉,发布到30.1的repository中;然后如果有需要开发1.1版本,则更改其版本号为1.1-snapshot。
有几点很重要:
- 所有非snapshot的项目都不允许提交更改内容!(即发布版本后不允许修改,所有修改都在后续版本中进行)
- 开发一个项目之前,都必须为其分配一个版本号,开发过程中我们使用这个版本号的snapshot版本
- 要发布一个项目的一个版本,这个项目的当前版本必须依赖于非snapshot的项目版本
- 发布一个项目需要将其发布到团队共享的maven repository中(30.1)
- 一个项目所依赖的其他项目并不需要是最新版本的
- 所有项目的新版本都应该兼容之前的版本