【问题标题】:Manage dependency version centralized集中管理依赖版本
【发布时间】:2018-10-12 15:02:24
【问题描述】:

我有多个项目使用版本XX的某个依赖关系,如果我发布新版本,我必须触摸每个项目以将其更改为版本XX.Y

我遇到了一种方法来编辑我的m2 设置<version>${my.version}</version>,添加一个参数并将其绑定到我的POM.xml,但这种隐含的意思是,每个用户都必须在我发布新版本时管理他们的m2 设置。

有没有办法像在 SVN 中一样集中(独立于用户)管理版本,因此无需更改任何内容,并且如果我发布新版本,它始终使用 up2date 版本?

【问题讨论】:

  • 最后一部分是矛盾的,因为你的用户决定使用不同的版本,这意味着他们必须在他们的 pom 文件中更改一些应该在版本控制(SVN 等)中提交的内容......
  • @khmarbaise 他们没有决定,有些人懒惰或错过适应 pom - 我的问题是如何自动化它,所以我(全局)设置版本,签入,然后这个每个子项目都会采用
  • 我看到了人们往往忘记更新的痛苦。但是将版本号偷偷带入其他项目也可能会带来很多麻烦(在没有人注意到的情况下突然破坏项目)。我目前正在考虑弃用机制,但我还没有下定决心。

标签: maven


【解决方案1】:

一般来说,每个项目的维护者都应该自己决定是否更新版本。更新版本可能会破坏事情,因此他们可能会选择保留旧版本。尤其重要的是,维护人员注意发生了一些变化,以便运行测试。

不过,对于开发,有快照版本。快照依赖项总是引用最新版本,但-SNAPSHOT 向项目的维护者表明了这一点。快照版本不应投入生产 - 构建不可重现。

如果工件是如此紧密耦合以至于它们被构建在一起,请考虑使用多模块项目。

【讨论】:

  • 我管理这个项目并且有用户。当我并且只有在验证新版本有效时,我才会提交它并希望强制 每个 用户使用新版本。不管快照
  • 从概念上讲,我为您的问题看到的唯一 Maven 解决方案是将您的项目和所有子项目放入一个多模块项目中。然后你一起构建所有东西,所有子项目都获得最新版本。或者,您可以在每次构建之前运行版本插件以更新 pom 中的版本。
【解决方案2】:

您可以使用一种称为“物料清单”的模式。

我认为您的问题与question 有点相似(但不完全是重复的),我的answer 也适用于这里:

您创建了一个新的 maven 项目(物料清单),该项目仅包含一个带有依赖管理块的 pom。在这里,您声明所有依赖项及其版本。包装应设置为pom

此物料清单 (bom) 项目现在用作所有其他项目的父项。使用依赖项时,仅指定组 id 和工件 id,省略版本标记。这样,版本将从 bom 中获取,您可以在一个中心位置管理依赖项的版本。

更多示例的详细信息是here(在页面的下部)或here

【讨论】:

  • 对于您的 BOM 方法:我还可以在 bom 中指定 <build> 流程吗,因为我还看到 子项目 中的冗余
  • 我认为这并不能解决问题,它只会减轻痛苦,因为不是多个版本来更改它们只是一个。
  • @0x2E5 是的,这是可能的。比如jboss parent poms就使用这种方式。
  • @JFMeier 我认为这最终会导致您在其他评论中描述的解决方案,一个多模块项目。
猜你喜欢
  • 2018-04-01
  • 2021-07-11
  • 2015-10-17
  • 1970-01-01
  • 2015-10-13
  • 2019-12-29
  • 2016-11-30
  • 2019-04-07
  • 2015-04-03
相关资源
最近更新 更多