如何使用包含 CI 构建号的 ​​4 位版本字符串构建多模块 Maven 项目?

How to built a multi-module Maven project with 4-digits of version string that includes CI build numbers?

有人要求我这样做,所以请不要暗示我不需要这样做。 :-p

我们目前使用 Maven 构建一个多模块项目。我们这样做没有问题。我们正在使用 Maven 发布插件,我们在 Jenkins 中获取用于开发和发布构建的 SNAPSHOT 构建。发布插件自动增加版本字符串的第三位。生活是美好的。

但是,我被要求在我们的版本字符串中添加第 4 个位置,其中填充了 Jenkins 构建 #。

我看到建议使用单个模块的规范方法可以很好地执行此操作:您定义一个 属性,如 build.number,具有默认值“0-SNAPSHOT”,并且您将您的 POM 定义为具有类似“1.9.${build.number}”的元素值。并且,您将 Jenkins 作业设置为将 build.number 定义为 Jenkins 构建 #,用于调用 Maven。

如果我们只有一个模块就好了,但我们没有。我们有多个模块,在 Maven 中我也不能 1. 不在子模块 POM 中指定版本,也不 2. 在子模块 POM 的版本中使用 属性。

我认为 Maven POM 尝试在单个模块中生成多个工件(例如,使用配置文件)是个坏主意,所以我不想尝试将这个项目缩减为单个模块。

我可能会尝试将它分成单独的项目,除非这看起来很激烈,而且,这个项目确实产生了非常紧密相关的工件,所以我想确保为任何源代码构建所有工件项目变更。

有什么解决办法吗?

maven-release-plugin 有两个参数,名为 releaseVersiondevelopmentVersion。在那里,您分别设置要构建的版本和下一个版本。

使用 Jenkins,您可以使用 Jenkins 生成的内容填充这些变量,例如使用版本号。如果你想从 POM 中读取版本号的部分,你可以使用 build-helper:parse-version 并使用像 ${parsedVersion.majorVersion}.

这样的术语