【问题标题】:Maven pom version inheritanceMaven pom 版本继承
【发布时间】:2020-12-28 22:00:48
【问题描述】:

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

项目父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)的版本?

【问题讨论】:

    标签: spring-boot maven maven-3


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您好,我试过了,但是您如何访问 project.properties.setProperty('root.pom.version', pom.version);在你的孩子 pom?这不起作用 ${root.pom.version}
      • 很高兴您尝试过。再看一遍,这可能无法在您想要使用的地方使用。 Maven 在执行插件之前很早就解决了依赖关系。我很好奇为什么你需要将祖父 POM 指定为依赖项?
      • 基本上 org.project.test 是一个 common-project 并且它的 parent 是 parent-system.so 它的版本应该和它的 parent 的版本一致
      • 那么你可能有更好的运气,比如maven-enforcer-plugin。它有一个 list of rules 你可以申请,包括一些管理版本的。
      猜你喜欢
      • 2017-02-22
      • 2016-04-11
      • 2020-06-27
      • 2012-03-17
      • 2011-12-23
      • 2012-12-22
      • 1970-01-01
      • 2019-06-07
      • 2015-05-30
      相关资源
      最近更新 更多