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

标签 java git maven

此问题旨在获取有关使用 Maven 构建的多模块 Java 应用程序的建议版本控制系统的反馈。

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

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

目标:最大限度地减少版本控制所需的工作(更新版本号、由于每个分支的版本信息不同而手动 merge 等)。

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

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

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

我正在考虑的系统是

  1. 始终使用版本号 <branch-name>-SNAPSHOT在 pom 文件中,加上配置 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 引用。 IE。您不需要单独的 BOM(目前...)
  • 内部库的简单功能分支。与之前相同,但您可能应该为使用此库的模块创建相同的分支,并为 BOM 创建相同的分支,以确保链接两个模块。
  • 系统版本。在所有模块(git 存储库)上创建发布分支。包括BOM模块。例如:release201810 。在分支 release201810 的 BOM 文件中确保使用版本 release201810-SNAPSHOT 引用所有引用的系统内部模块.
  • 并行开发。根据需要在模块上创建自定义分支。更新自定义 BOM,因为模块已针对此开发进行了分支。

这是个好主意吗?

最佳答案

我有一些担忧:

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

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

关于java - 使用 git 分支进行 Maven 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53109862/

相关文章:

java - 计算 Arraylist 中具有特定属性的项目

git - JGit:推送到特定分支

maven - 如何在多模块 spring-boot maven 项目中构建特定模块

java - Spring Flex 1.5.0-M1 在 Maven Repo 中的任何地方?

maven - maven-javadoc-plugin 中的 sourceFileExcludes 标记

java - Java 中使用 Deque 的 pop() 问题

java - 我们什么时候得到 java.lang.NoSuchMethodError 即使 jar/class 有特定的方法

java - 秒表错误,求助!! - java.lang.NumberFormatException : Invalid int: "0:00"

git - 使用 Windows PowerShell 设置 .SSH key 时出错

升级 Mac OS X El Capitan 后 Git 不工作