【问题标题】:Managing consistent versions across multiple Maven projects跨多个 Maven 项目管理一致的版本
【发布时间】:2017-08-23 23:16:01
【问题描述】:

我有一个由各种 Java 库和服务组成的系统,全部使用 Maven 构建 - 每个都是单独的 Maven 项目,它引用一个共同的父 pom 项目,该项目定义了一组一致的第 3 方库版本。每个项目都使用属性来定义堆栈中依赖项的版本。

目前,为了构建一组发布工件,我们必须对堆栈进行处理,对每个项目进行发布构建。这需要手动更改内部版本(在属性部分)以匹配发布堆栈版本。

例如,假设我们有 3 个项目,A、B 和 C,其中 C 依赖于 A 和 B。那么过程将是:

  1. 发布版本 A。
  2. 发布版本 B。
  3. 更新 C pom.xml 以引用 A 和 B 的新版本。
  4. 提交 pom.xml
  5. 发布版本 C。

由于项目数量众多,这变得非常乏味且容易出错。

我的问题是,有没有首选的方法来自动化其中的一些,例如在他们自己的项目中定义发布库版本?例如。我们集中定义构成系统 Vx.y 的库版本。然后我们自动更新所有项目 pom.xml 文件以使用这些版本。

我们尝试过的一件事是将版本放入共享的父 pom 中,但是这会产生循环依赖,这会导致更改父 pom 版本的永无止境的循环,因为 lib 版本已更改,然后需要更新所有项目以获取新的父 pom,然后需要新的父 pom,依此类推。

【问题讨论】:

  • 第一件好事是您使用了一个共同的父级,但问题是您使用属性来定义依赖项的版本。更好的办法是在公共父级中仅定义 dependencyManagement 和第 3 方库的版本。但是您必须防止在项目中使用属性。此外,您的发布看起来应该使用多模块构建,这意味着只需将您发布的所有项目放在一个单一的多模块构建中,然后将整个发布合二为一。唯一的问题是所有模块都具有相同的版本.
  • 这样的多模块构建可以如下所示:github.com/khmarbaise/javaee ...
  • 我们确实在父 Pim 中使用了 dependencyManagement 部分,但仅适用于第 3 方库。正如我在上面指出的那样,将堆栈版本放在那里似乎是循环的。我不完全相信多模块方法会起作用,因为我们并不总是发布所有组件,而且它们都有不同的版本
  • 多模块设置将处理这个问题,这意味着单个发布调用(maven-release-plugin)..就是这样..是的,您将发布不需要的模块,这确实很痛.. .此外,您拥有所有具有相同版本的模块的一致状态...您可以在使用旧版本的一个版本中使用不同的模块...另一种解决方案是通过使用 Jenkins 和管道来自动化此发布过程(versions-maven-plugin 可以在这里提供帮助)...但是您将自己执行命令...如果更改,您需要更改工作...

标签: java maven


【解决方案1】:

一致的答案似乎是 - 使用Maven multi-module 项目。我已经在两个系统上进行了尝试,发现它实际上工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2016-01-27
    • 2012-05-13
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多