我有两个项目:父项目: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-SNAPSHOT的唯一地方是A/pom.xml。但是如果我从父部分的B/pom.xml中删除<version>0.1-SNAPSHOT</version>, maven会抱怨父部分缺少版本。

是否有一种方法可以使用${project。Version}或类似的东西,以避免出现01。-快照在两个poms?


当前回答

从Maven 3.5.0开始,您可以使用${revision}占位符。这里记录了使用方法:Maven CI友好版本。

简而言之,父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 Plugin生成pom文档,其中包含用于部署的专用版本号。HowTo在链接的文档中有详细的说明。

@khmarbaise也写了一篇关于这个功能的不错的文章:Maven:没有版本的POM文件?

其他回答

IMO更新版本的最简单方法:

$ mvn versions:set -DgenerateBackupPoms=false

(在你的根/父pom文件夹中进行)。

您的POMs将被解析,并询问您要设置哪个版本。

你还可以用:

$ mvn release:update-versions -DdevelopmentVersion={version}

更新pom内的版本号。

<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的pom的父块中删除版本,我认为你不能这样做,groupId, artifactId和version指定了父的pom坐标,你可以省略的是子版本。

It worked for me using BOM approach on parent pom.xml: 

My scenario:
 - parent pom.xml 0.0.0.1-SNAPSHOT
 - sub-project1
 - sub-project2 (sub-project1 is a dependency)

<properties>        
    <revision>0.0.0.1-SNAPSHOT</revision>        
</properties>

<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>commons</name>
<description>parent module of commons project</description>


<modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
</modules>

<dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>2.6.4</version>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>com.example.commons</groupId>
            <artifactId>sub-project1</artifactId>
            <version>${revision}</version>
        </dependency>
    </dependencies>

</dependencyManagement>

子项目pom.xml可以从父项目继承${revision}编号,而且实际列出的依赖项不需要显式地提到标记

    <parent>
        <groupId>com.example</groupId>
        <artifactId>commons</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.example.commons</groupId>
    <artifactId>sub-project2</artifactId>
    <version>${revision}</version>
    <name>sub-project2</name>
    <description>implement sub-project2 </description>

    
    <dependencies>  
        <dependency>
            <groupId>com.example.commons</groupId>
            <artifactId>sub-project1</artifactId>           
        </dependency>
       
    </dependencies>

从Maven 3.5.0开始,您可以使用${revision}占位符。这里记录了使用方法:Maven CI友好版本。

简而言之,父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 Plugin生成pom文档,其中包含用于部署的专用版本号。HowTo在链接的文档中有详细的说明。

@khmarbaise也写了一篇关于这个功能的不错的文章:Maven:没有版本的POM文件?