【问题标题】:Maven - versioning parent pom and child pom to inherit parent pom versionMaven - 版本控制父 pom 和子 pom 以继承父 pom 版本
【发布时间】:2017-02-22 13:39:49
【问题描述】:

我正在使用 Maven 3.x,我的父 pom 和子 pom 中有以下结构。

父pom

<groupId>com.mygoogle.sample</groupId>
<artifactId>workorder</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
    <project.version>1.0-SNAPSHOT</project.version>             
</properties>

我有一个如下的子 pom

<parent>
 <groupId>com.mygoogle.sample</groupId>
 <version>${project.version}</version>
 <artifactId>workorder</artifactId>     
</parent>
<artifactId>workorder-client</artifactId>
<packaging>jar</packaging>

当我使用 mvn install 构建我的工件时, 我看到 jars 在我的 .m2 文件夹中构建,但 project.version 没有替换为实际版本,即 1.0-SNAPSHOT。

  1. 我的 .m2 存储库中每个工件的父 pom 和/或子 pom 是否具有指定的版本或者是 project.version

  2. 我是否应该将 project.version 指定为我父 pom.xml 中的属性? maven 文档指出 project.version 可以通过默认方式获得。我还尝试了 mvn install post删除父 pom 中的 project.version 属性,但生成的工件在我的 .m2 文件夹中仍然具有 {project.version} 的版本,而不是实际版本

  3. 如何在我的父 pom 中设置一个版本并让我的所有子 pom 具有相同的版本。例如,我想在 workorder pom 中设置一个版本,并且 workorder-client pom 也应该继承相同的版本。

【问题讨论】:

  • 您需要指定&lt;version&gt; 并且不能依赖project.version 属性:它不在&lt;parent&gt; 元素中进行评估。
  • @Tunaki,刚刚编辑了我的原始帖子,我本来打算在父 pom 中指定实际版本,但在我现在已经更正的帖子中指定了 {project.version} 属性。因此,通过上述设置,为什么我的子 pom 没有在父 pom 中获取属性。对最初的困惑表示歉意。
  • 正如链接问题中的回答,您不能拥有&lt;version&gt;${project.version}&lt;/version&gt;&lt;parent&gt; 元素中必须有 &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;

标签: maven maven-3


【解决方案1】:

你的父 pom 应该是这样的:

<groupId>com.mygoogle.sample</groupId>
<artifactId>workorder</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

你的孩子 pom 应该是这样的:

<parent>
   <groupId>com.mygoogle.sample</groupId>
   <version>1.0-SNAPSHOT</version>
   <artifactId>workorder</artifactId>     
</parent>

<artifactId>workorder-client</artifactId>
<packaging>jar</packaging>

这将有助于顺利维护父级和子级之间的版本控制。
下次要更改版本时,只需在指向父 pom 目录时使用以下命令即可。

mvn versions:set -DnewVersion=2.0-SNAPSHOT

【讨论】:

  • 我可以在我的子 pom 中有 {project.version},如下所示 com.mygoogle.sample${project.version}workorderworkorder-clientjar
  • 刚刚编辑了我的原始帖子,我原本打算在父 pom 中指定实际版本,但在我现在更正的帖子中指定了 {project.version} 属性。那么通过上述设置,为什么我的孩子 pom 没有拿起父 pom 中的属性
  • 你不能使用&lt;version&gt;${project.version}&lt;/version&gt;,因为在子pom中,没有定义这样的属性。所以继承首先不会发生。可能你对它会继承父 pom 感到困惑。但是由于没有定义${project.version} 属性,子pom 将无法解析&lt;version&gt;${project.version}&lt;/version&gt; 值。因此继承不会发生。
猜你喜欢
  • 2020-12-28
  • 2019-07-24
  • 2012-03-17
  • 2018-03-05
  • 2011-12-23
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多