Maven pom版本继承

Maven pom version inheritance

我有 3 个项目 Parent,Child,SubChild。

Project Parent pom如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.3.RELEASE</version>
</parent>

<groupId>mu.parent</groupId>
<artifactId>parent-system</artifactId>
<version>1.0</version>
<packaging>pom</packaging>

.....

Project Child pom 定义如下,其 Parent 定义如下:

<modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>mu.parent</groupId>
        <artifactId>parent-system</artifactId>
        <version>1.0</version>
    </parent>
    
    <groupId>mu.dummy.child</groupId>
    <artifactId>child-backend</artifactId>
    <name>child-backend</name>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

  <modules>
        <module>subChild-app</module>
  
    </modules>


...

现在 subChild pom 如下,子项被定义为 subChild 的父项:

 <parent>
            <groupId>mu.dummy.child</groupId>
           <artifactId>child-backend</artifactId>
          <version>0.0.1-SNAPSHOT</version>
    </parent>
 <groupId>mu.dummy.subchild</groupId>
    <artifactId>subchild-backend</artifactId>
    <name>subchild-backend</name>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

  <dependencies>
        <dependency>
            <groupId>org.project.test</groupId>
            <artifactId>project</artifactId>
       <version></version> --version of parent-system???
        </dependency>

    </dependencies>

是否可以在不硬编码的情况下在子后端中获取父系统(1.0)的版本?

您可以使用 CI-friendly 版本并为版本编写 ${revision},在主 pom 中设置此 属性(您从中构建所有内容)。

不过,您需要使用 flatten Maven 插件才能在存储库中获取正确的 POM。

我刚才问了一个类似的问题,并确定 groovy-maven-plugin 可以解决这个问题。参见 this answer