使用 maven 碰撞模块版本
Posted
技术标签:
【中文标题】使用 maven 碰撞模块版本【英文标题】:Bumping versions of modules with maven 【发布时间】:2015-12-22 00:45:00 【问题描述】:我有一个大型的多模块 maven 项目(数十个模块,4 个嵌套级别)。
每个模块都有自己的语义版本(可以是SNAPSHOT
,也可以不是)。
我想找到一种方法,用一个命令或脚本自动调整每个模块的主要版本,以避免每个模块都发生变化。
所以我有例如
父 POM (1.2.3-SNAPSHOT) |-- api 模块 (3.4.5) |-- 实现模块 (5.6.7-SNAPSHOT) |-- 另一个父模块 (1.0.1-SNAPSHOT) |--|--子模块1 (1.2.3) |--|--子模块2 (2.3.4)撞了之后我想拥有
父 POM (2.0.0-SNAPSHOT) |-- api 模块 (4.0.0) |-- 实现模块 (6.0.0-SNAPSHOT) |-- 另一个父模块 (2.0.0-SNAPSHOT) |--|--子模块1 (2.0.0) |--|--子模块2 (3.0.0)我知道Maven Release Plugin 和Versions Maven Plugin,但我不知道如何让它们自动更新主要版本。
你能帮我解决这个问题吗?
【问题讨论】:
拳头看起来你在滥用多模块构建,因为通常所有模块/父级应该具有相同的版本。除此之外,您可以使用mvn versions:set -DnewVersion=13.5.6.
更改版本
【参考方案1】:
在一个多模块项目中,每个模块都应该有相同的版本。我建议将您的模块拆分为单独的 Maven 项目,然后使用 Maven Release Plugin 和 Versions Maven Plugin 会更容易。
【讨论】:
> 在多模块项目中,每个模块都应该具有相同的版本。这是为什么?任何证明链接? 简而言之,背后的想法是,当您的应用程序很大时,您将其拆分为模块。因此,您的模块应该与您的应用程序具有相同的版本,以识别哪些模块构成了您的应用程序的特殊版本。你可以在Maven By Example这本书中找到关于这个主题的很好的介绍 您还可以在单个多模块项目中拥有多个独立的应用程序【参考方案2】:我同意这个想法
多模块项目,每个模块都应该有相同的版本
但是我们在一个有多个团队参与的大项目中已经有了一些模块结构,并且不能轻易更改。
由于我还没有找到解决方案,我为此创建了一个 groovy 脚本:https://github.com/ddska/maven-semver-bumper
【讨论】:
以上是关于使用 maven 碰撞模块版本的主要内容,如果未能解决你的问题,请参考以下文章
[转]Maven多模块结构下版本管理的正确姿势-revision
如果我更新了一个反应模块,使得现有的代码功能但 Jest 快照测试可能会中断,那应该是主要版本的碰撞吗?