这个问题是关于使用Maven构建的多模块Java应用程序的建议版本系统的反馈。
我们开发了一个多jar系统(微服务),其中包含约15个模块/ jar。其中一些(5)是系统中其他模块使用的库,但不在系统外部。这些模块都存储在单独的git存储库中。
我们已经发布了第一个版本,需要认真对待分支/版本。
目标 :最大限度地减少了有关版本控制的工作(更新版本号,由于每个分支的版本信息不同而进行手动合并等)。
方法 :模块是通过模块名称和git分支名称而不是模块名称和版本来标识的
我们构建自己的“版本文件”,这些文件保存为每个模块中的资源。这些包含模块本身以及所包含模块的构建时间,git commit-id,分支名称,构建URL等。因此,部署后我们不需要任何Maven版本号。
注意 :对于系统外部的库模块,我们对内部开发和外部开发的模块均使用标准方法。就是使用Maven依赖系统进行严格编号的版本控制。
我正在考虑的系统是
<branch-name>-SNAPSHOT
,并将Maven配置为始终获取最新的SNAPSHOT版本(不仅是默认情况下每天更新-引用What exactly is a Maven Snapshot and why do we need it?)。此系统中模块的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文件应包括使用显式版本的依赖项,也应包括系统内部模块的依赖项。
示例流程:
${revision}
作为BOM引用。就是您不需要单独的BOM(尚未...)release201810
。在分支release201810
的BOM文件中,确保使用版本release201810-SNAPSHOT
引用所有引用的系统内部模块。这是个好主意吗?
答案 0 :(得分:2)
我有一些担忧:
我必须说,每次我偏离标准时(出于充分的理由,例如公司的遗留结构),都会在以后引起问题。