有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用git分支的java Maven版本控制

这个问题是为了获得关于使用Maven构建的多模块java应用程序的建议版本控制系统的反馈

我们已经开发了一个多jar系统(micro services),大约有15个模块/jar。其中一些(5)是系统内其他模块使用的库,但不是系统外的库。这些模块都存储在单独的git存储库中

我们已经发布了第一个版本,需要认真对待分支/版本控制

目标:最小化版本控制方面需要完成的工作(更新版本号,由于每个分支的版本信息不同而手动合并等)

如何:模块是通过模块名称和git分支名称来标识的,而不是通过模块名称和版本来标识的

我们构建自己的“版本文件”,并将其保存为每个模块中的资源。其中包含模块本身以及包含的模块的构建时间、git提交id、分支名称、构建URL等。因此,部署后我们不需要任何Maven版本号

:对于系统外的库模块,我们对内部开发的模块和外部开发的模块都使用标准方法。使用Maven依赖系统进行严格编号的版本控制

我考虑的系统是

  1. 始终在pom文件中使用版本号<branch-name>-SNAPSHOT,并配置Maven以始终获取最新的快照版本(而不是像默认情况下那样每天-ref.What exactly is a Maven Snapshot and why do we need it?
  2. 使用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) 个答案

  1. # 1 楼答案

    我有一些顾虑:

    1. 您通常将整个多模块项目放入一个git存储库中。然后,您将分支到整个项目,而不是单个模块
    2. 整个项目通常有一个x.y.z-SNAPSHOT形式的版本号,该版本号会随着时间的推移而增加。发布版本应使用发布版本构建,而在开发过程中,您可以使用快照版本
    3. 可以将分支构建为x.y.z-branchname-SNAPSHOT,但是将版本号一起删除是非常不标准的

    我必须说,每次我偏离标准(出于良好的原因,比如公司的遗留结构),都会导致后来的问题