使用git分支进行Maven版本控制

时间:2018-11-01 21:51:44

标签: java git maven

这个问题是关于使用Maven构建的多模块Java应用程序的建议版本系统的反馈。

我们开发了一个多jar系统(微服务),其中包含约15个模块/ jar。其中一些(5)是系统中其他模块使用的库,但不在系统外部。这些模块都存储在单独的git存储库中。

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

目标 :最大限度地减少了有关版本控制的工作(更新版本号,由于每个分支的版本信息不同而进行手动合并等)。

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

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

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

我正在考虑的系统是

  1. 始终使用pom文件中的版本号<branch-name>-SNAPSHOT,并将Maven配置为始终获取最新的SNAPSHOT版本(不仅是默认情况下每天更新-引用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来指定的,类似于:mvn deploy -Drevision=<branch-name>-SNAPSHOT(参考:https://maven.apache.org/maven-ci-friendly.html)。

如pom所示,我们(大多数)将在系统中使用的每个分支名称有一个BOM版本,版本名称为<branch-name>-SNAPSHOT-与模块本身相同。 BOM文件应包括使用显式版本的依赖项,也应包括系统内部模块的依赖项。

示例流程:

  • 一个简单的功能分支。在分支中修改pom,以便BOM引用与父分支相同-替换${revision}作为BOM引用。就是您不需要单独的BOM(尚未...)
  • 内部库的简单功能分支。与先前相同,但是您可能应该使用此库为模块创建相同的分支,并为BOM创建相同的分支,以确保两个模块已链接。
  • 系统版本。在所有模块(git存储库)上创建发行分支。包括BOM表模块。例如:release201810。在分支release201810的BOM文件中,确保使用版本release201810-SNAPSHOT引用所有引用的系统内部模块。
  • 并行开发。根据需要在模块上创建自定义分支。在为该开发分支模块时更新自定义BOM。

这是个好主意吗?

1 个答案:

答案 0 :(得分:2)

我有一些担忧:

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

我必须说,每次我偏离标准时(出于充分的理由,例如公司的遗留结构),都会在以后引起问题。