使用 Maven 管理微服务之间的多个依赖关系

Manage multiple dependencies between microservices using Maven

我们使用 Maven 来定义和管理微服务之间的依赖关系。这是一个例子:

微服务 1

<artifactId>ms-1</artifactId>
<version>0.25.04-SNAPSHOT</version>
<dependencies>
    <dependency>
        <artifactId>ms-2</artifactId>
        <version>0.25.00-SNAPSHOT</version>
    </dependency>
</dependencies>

微服务 2

<artifactId>ms-2</artifactId>
<version>0.25.00-SNAPSHOT</version>
<dependencies>
    <dependency>
        <artifactId>ms-3</artifactId>
        <version>0.28.00-SNAPSHOT</version>
    </dependency>
</dependencies>

问题是发布阶段要花很多时间,而且完全是手动的:

  1. 为第一个微服务执行 mvn:release(删除 -SNAPSHOT
  2. 更改依赖项 pom.xml 中的版本
  3. 对第二个微服务执行 mvn:release(删除 -SNAPSHOT
  4. 等等(实际上是在 15 个微服务上...)

我想知道是否有任何自动化的方式来执行此版本(级联)?

谢谢

Maven 项目不负责管理其依赖项的版本。这是构建负责其版本的依赖项工件的项目。

在您的情况下,您可以创建一个(伪)聚合器项目,将所有微服务作为子模块包括在内:

<modules>
    <module>../ms-1</module>
    <module>../ms-2</module>
    <module>../ms-3</module>
    <module>../...</module>
    <module>../ms-15</module>
</modules>

假设您的微服务项目是彼此的兄弟姐妹,例如:

+- (pseudo-)aggregator
|  +- pom.xml
+- ms-1
|  +- pom.xml
+- ms-2
|  +- pom.xml
+- ms-3
|  +- pom.xml
+- ms-...
|  +- pom.xml
+- ms-15
   +- pom.xml

如果他们不相应地调整相对 <module>s 路径。

这样你就被要求提供所有项目的发布版本(默认是当前 <version> 减去 -SNAPSHOT,只需 Enter 确认) 在 .../(pseudo-)aggregator $ mvnrelease:prepare 期间,这也会相应​​地更新您的 <dependencies>/<dependency>/<version>

或者您可以使用 -B | --batch-mode 执行 non-interactive release,它使用默认值而不询问。

最后修正:

release 不是 Maven's build lifecycles. It's the shortcut for the maven-release-plugin that has various goals 阶段