具有属性的 Maven 版本

2022-08-31 17:15:12

我有大Maven(Tycho)项目女巫大约400个插件。

我们在每个POM文件中指定了应用程序的版本。

有没有办法只在一个地方指定所有POM:s的版本?

我希望有些人会这样想:

<properties>
<buildVersion>1.1.2-SNAPSHOT</buildVersion>
</properties>

....

<version>${buildVersion}</version>

我们有父母:pom.xml

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>build.parent</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>pom</packaging>

然后在每个POM中引用父POM:

<parent>
  <artifactId>build.parent</artifactId>
  <groupId>company</groupId>
  <relativePath>../build.parent/pom.xml</relativePath>
  <version>1.1.2-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>artifact</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>

答案 1

如果您有一个父项目,则可以在父 pom 中设置版本,在子项目中,您可以使用 ${project.version} 或 ${version} 属性引用同级库。

如果要避免在每个子项中重复父级的版本:可以执行以下操作:

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>build.parent</artifactId>
<version>${my.version}</version>
<packaging>pom</packaging>

<properties>
<my.version>1.1.2-SNAPSHOT</my.version>
</properties>

然后在你的孩子pom中,你必须做:

    <parent>
      <artifactId>build.parent</artifactId>
      <groupId>company</groupId>
      <relativePath>../build.parent/pom.xml</relativePath>
      <version>${my.version}</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>company</groupId>
    <artifactId>artifact</artifactId>
    <packaging>eclipse-plugin</packaging>

    <dependencies>
        <dependency> 
           <groupId>company</groupId>
           <artifactId>otherartifact</artifactId>   
           <version>${my.version}</version>
or
           <version>${project.version}</version>
        </dependency>
    </dependencies>

hth


答案 2

正确答案是这样的(示例版本):

  • 在父 pom.xml你应该有(不在里面):properties

    <version>0.0.1-SNAPSHOT</version>
    
  • 在所有子模块中,您应该具有:

    <parent>
        <groupId>com.vvirlan</groupId>
        <artifactId>grafiti</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    

所以它是硬编码的。

现在,要更新版本,请执行以下操作:

mvn versions:set -DnewVersion=0.0.2-SNAPSHOT
mvn versions:commit # Necessary to remove the backup file pom.xml

并且所有 400 个模块都将更新父版本。


推荐