小编典典

Maven 项目版本继承 - 我必须指定父版本吗?

all

我有两个项目:父项目:A,子项目:B

一个/pom.xml:

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

在 B/pom.xml 中,我有:

    <parent>
        <groupId>com.dummy.bla</groupId>
        <artifactId>parent</artifactId>
        <version>0.1-SNAPSHOT</version>     
    </parent>

    <groupId>com.dummy.bla.sub</groupId>
    <artifactId>kid</artifactId>

我希望 B 从父级继承版本,所以在我的情况下我需要放置的唯一位置0.1-SNAPSHOTA/pom.xml.
但是,如果我<version>0.1-SNAPSHOT</version>B/pom.xml父部分下删除,maven 会抱怨缺少父版本。

有没有一种方法可以让我使用${project.version}或类似的方法来避免同时01.-SNAPSHOT使用两个 pom?


阅读 60

收藏
2022-06-01

共1个答案

小编典典

编辑: 自 Maven 3.5.0 以来,使用${revision}占位符有一个很好的解决方案。有关详细信息,请参阅答案。对于以前的 Maven 版本,请参阅下面的原始答案。

从 Maven 3.5.0 开始,您可以使用${revision}占位符。此处记录了使用情况:Maven CI Friendly Versions

简而言之,父 pom看起来像这样(引自 Apache 文档):

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>
  <modules>
    <module>child1</module>
    ..
  </modules>
</project>

像这样的孩子

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.maven.ci</groupId>
    <artifactId>ci-parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-child</artifactId>
   ...
</project>

您还必须使用Flatten Maven 插件来生成 pom 文档,其中包含用于部署的专用版本号。HowTo 记录在链接的文档中。


不,没有。您始终必须指定父母的版本。幸运的是,在大多数情况下,它作为模块的版本被继承。此外,这个父版本的声明是由 Maven Release Plugin
自动碰撞的,所以 - 事实上 - 只要你使用 Maven Release Plugin 发布或只是碰撞版本,你在 2 个地方都有版本不是问题。

请注意,在某些情况下,这种行为实际上非常好,并且提供了您可能需要的更多灵活性。有时你想使用一些以前父母的版本来继承,但这不是主流情况。

2022-06-01