我想知道在多模块 Maven Spring Boot 项目中为子模块创建单独的工件的最佳实践是什么。假设您有一个项目(操作员)、一个根 pom.xml 和两个子模块。 Kafka-operator 和 proxy-sql-operator 应该创建自己的工件,它们还会在 Jenkins 中触发自己的管道。我们需要单独的版本,而不需要有两个存储库。
以下是该概念的概述。
我想控制父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 及其子模块
我怎样才能实现这个目标?
你基本上就在那里,但你需要使用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”中使用该版本。