为多模块 Maven 项目中的子模块构建单独的工件

问题描述 投票:0回答:1

我想知道在多模块 Maven Spring Boot 项目中为子模块创建单独的工件的最佳实践是什么。假设您有一个项目(操作员)、一个根 pom.xml 和两个子模块。 Kafka-operator 和 proxy-sql-operator 应该创建自己的工件,它们还会在 Jenkins 中触发自己的管道。我们需要单独的版本,而不需要有两个存储库。

以下是该概念的概述。

enter image description here

我想控制父pom.xml中两个模块的版本

根 pom.xml 中的当前配置

<parent>
    <groupId>be.example</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
</parent>

<groupId>be.example</groupId>
<artifactId>operators</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>

<properties>
    <revision>0.0.1-SNAPSHOT</revision>

    <kafka-operator.version>0.0.3-SNAPSHOT</kafka-operator.version>
    <proxysql-operator.version>0.0.2-SNAPSHOT</proxysql-operator.version>
</properties>

我希望我可以做这样的事情来在子模块中使用这些版本。

kafka-operator 的 pom:

<parent>
    <groupId>be.example.operators</groupId>
    <artifactId>operators</artifactId>
    <version>${revision}</version>
</parent>


<artifactId>kafka-operator</artifactId>
<version>${kafka-operator.version}</version>
<packaging>pom</packaging>

<modules>
    <module>kafka-operator-core</module>
    <module>kafka-operator-adapter</module>
</modules>

在 kafka-operator-core 模块中我会做这样的事情:

<parent>
    <groupId>be.example.operators</groupId>
    <artifactId>kafka-operator</artifactId>
    <version>${kafka-operator.version}</version>
</parent>

<artifactId>kafka-operator-core</artifactId>

但是在 kafka-operator-core 模块中,Maven 抱怨版本不正确,并且我无法使用根 pom.xml 中定义的版本。相同的设置适用于 proxysql-operator 及其子模块

我怎样才能实现这个目标?

java spring spring-boot maven maven-3
1个回答
0
投票

你基本上就在那里,但你需要使用Flatten Maven Plugin。请参阅此处@FrVaBe 的回答

将此插件添加到您的父 pom 中:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>flatten-maven-plugin</artifactId>
  <version>1.6.0</version>
  <configuration>
    <updatePomFile>true</updatePomFile>
  </configuration>
  <executions>
    <execution>
      <id>flatten</id>
      <phase>process-resources</phase>
      <goals>
        <goal>flatten</goal>
      </goals>
    </execution>
  </executions>
</plugin>

我还建议将

${kafka-operator.version}
的定义移至“kafka-operator”的 pom,除非您在同级 pom“proxysql-operator”中使用该版本。

© www.soinside.com 2019 - 2024. All rights reserved.