mono移植到鸿蒙,在Monorepo中,如何使用Maven对多个微服务进行版本控制?

【51CTO.com快译】项目部署的每一段代码都必须具有唯一的版本,这一点至关重要,它可以帮助您跟踪客户端的运行情况,标记部署的更改,并使你的工作变得轻松得多——特别是当你在半夜尝试了解客户端站点上运行的更改时。

在开发微服务时,它的重要性是之前的两倍。通常,你单独部署的服务,你是知道服务使用哪个依赖项的哪个版本。而许多开发人员面临的需求是如何在依赖项发生变化时自动(或手动)更新它们。

在我的一个项目中有一个单独的存储库,包含所有的服务,并分别构建和部署。而作为我们持续集成和部署的一部分,我们希望只构建被更改的服务或其依赖项之一已更改的服务,并且还要确保很容易向系统添加新服务。

然后我找到了 Versions Maven 插件,它可以用来自动更新 Maven 项目的版本,并确保自动更新所有依赖它的其他项目。

本次示例项目提供了三种服务。service2依赖于service1 、services3 依赖于 service1 和 service2。

每个服务都有一个包含自己POM文件的文件夹,每个子服务都有一个子文件夹。如下图所示:

14051fe04d42fb14e5a70a4ede7934cb.png

我需要一个中心位置来管理所有的服务版本,所以我添加了以下到主(聚合器) pom.xml:

. . .

1.1-SNAPSHOT

2.1-SNAPSHOT

3.1-SNAPSHOT

当服务版本改变时,我想自动更新服务 pom.xml 文件中的版本,所以我在聚合器 pom.xml 中添加了以下内容:

. . .

0

generate-sources

none

-invalid-

. . .

org.codehaus.mojo

versions-maven-plugin

2.7

${version.phase}

set

update-version

false

${service.name}*

${service.version}

我添加了三个新属性,可以通过每个单独的服务进行设置:

version.phase -版本插件运行阶段。我需要在编译之前运行它,因此我定义了一个名为 version.update 的新属性。默认设置为一个不存在的阶段,这样版本控制将只针对我需要它们运行的服务运行。

service.name -服务名称。因为想要所有子项目具有相同的版本,这里使用了$ {service.name}。

service.version-设置服务版本。

接下来在每个服务(service1\pom.xml)添加下面几行:

service1

${version.update.enable}

${service1.version}

现在每个服务都定义了它的名称(与目录相同),设置 version.phase 使用 version.update.enable(其被设置 generate-sources)和设置该版本的值为在根目录 pom.xml 中定义的属性。

现在,如果你更新版本运行 MVN 编译版本将会自动更新:

207ddf0aba2fe795255ab6f3e2af90a3.png

使用这种方法,我们能够向所有现有的微服务添加版本控制,并轻松地创建新服务。这样,所有依赖版本的自动版本更新就完成了。

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:黄显东 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值