【问题标题】:How to built a multi-module Maven project with 4-digits of version string that includes CI build numbers?如何使用包含 CI 内部版本号的 4 位版本字符串构建多模块 Maven 项目?
【发布时间】:2019-05-10 14:18:02
【问题描述】:

我被要求这样做,所以请不要建议我不需要这样做。 :-p

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

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

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

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

我认为 Maven POM 尝试在单个模块中生成多个工件(例如,使用配置文件)是一个坏主意,因此我不想尝试将此项目简化为单个模块。

我可能会尝试将其拆分为单独的项目,但这似乎很激烈,此外,这个项目确实产生了非常紧密相关的工件,所以我想确保为任何源代码更改构建所有工件项目。

有什么解决办法吗?

【问题讨论】:

    标签: maven continuous-integration versioning multi-module


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多