使用git分支的java Maven版本控制
这个问题是为了获得关于使用Maven构建的多模块java应用程序的建议版本控制系统的反馈
我们已经开发了一个多jar系统(micro services),大约有15个模块/jar。其中一些(5)是系统内其他模块使用的库,但不是系统外的库。这些模块都存储在单独的git存储库中
我们已经发布了第一个版本,需要认真对待分支/版本控制
目标:最小化版本控制方面需要完成的工作(更新版本号,由于每个分支的版本信息不同而手动合并等)
如何:模块是通过模块名称和git分支名称来标识的,而不是通过模块名称和版本来标识的
我们构建自己的“版本文件”,并将其保存为每个模块中的资源。其中包含模块本身以及包含的模块的构建时间、git提交id、分支名称、构建URL等。因此,部署后我们不需要任何Maven版本号
注:对于系统外的库模块,我们对内部开发的模块和外部开发的模块都使用标准方法。使用Maven依赖系统进行严格编号的版本控制
我考虑的系统是
- 始终在pom文件中使用版本号
<branch-name>-SNAPSHOT
,并配置Maven以始终获取最新的快照版本(而不是像默认情况下那样每天-ref.What exactly is a Maven Snapshot and why do we need it?)李> - 使用BOM表(参考Maven BOM [Bill Of Materials] Dependency)定义依赖项李>
此系统中模块的pom文件类似于:
<project>
...
<version>${revision}</version>
<dependencies>
<dependency>
<groupId>mygroup</groupId>
<artifactId>bom</artifactId>
<version>${revision}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
<properties>
<revision>default_version</revision>
<properties>
</project>
此版本是在构建期间通过使用类似于:mvn deploy -Drevision=<branch-name>-SNAPSHOT
(ref:https://maven.apache.org/maven-ci-friendly.html)的命令执行mvn指定的
如pom所示,系统中使用的每个分支名称(大多数情况下)都有一个BOM版本,版本名<branch-name>-SNAPSHOT
-与模块本身相同。BOM表文件应包括使用显式版本的依赖项,系统内部模块也是如此
流程示例:
- 一个简单的特征分支。在分支修改pom中,使BOM引用与父分支相同-替换
${revision}
作为BOM引用。也就是说,您不需要单独的BOM表(但…)李> - 内部库的简单功能分支。与前面相同,但您可能应该使用此库为模块创建相同的分支,并为BOM创建相同的分支,以确保两个模块链接李>
- 系统发布。在所有模块(git存储库)上创建发布分支。包括BOM模块。例如:
release201810
。在分支release201810
的BOM文件中,确保使用版本release201810-SNAPSHOT
引用所有引用的系统内部模块李> - 平行发展。根据需要在模块上创建自定义分支。在为该开发分支模块时更新自定义BOM表李>
这是个好主意吗
# 1 楼答案
我有一些顾虑:
我必须说,每次我偏离标准(出于良好的原因,比如公司的遗留结构),都会导致后来的问题