Maven 发布插件 - release:branch - -DbranchName 中的版本参数

Maven Release Plugin - release:branch - Version Parameter in -DbranchName

当执行 mvn release:branch 命令时,我想尝试使用版本参数配置 -DbranchName 参数。但是我还没有找到成功的方法。

例如,如果我在主干中有一个版本为 1.0-SNAPSHOT 的项目,我想使用 --batch-mode 选项创建一个分支,并使用当前项目版本 (1.0) 指定 -DbranchName -SNAPSHOT) 作为 branchName 中的参数。

我试过 mvn release:branch -DbranchName=VERSION-@{project.version},但它似乎没有像我希望的那样工作。我没有创建名称为 VERSION-1.0 的分支,而是收到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:branch (default-cli) on project project-a: Unable to branch SCM
[ERROR] Provider message:
[ERROR] The svn branch command failed.
[ERROR] Command output:
[ERROR] svn: E205000: Try 'svn help copy' for more information
[ERROR] svn: E205000: Syntax error parsing peg revision '{project.version}'

有没有有效的方法来做到这一点?或者在使用 Maven 发布插件执行 release:branch 时这是不可能的吗?

编辑

基本上,我正在寻找的是类似于 tagNameFormat 属性 的东西,但用于分支。在执行 release:perform 目标时,我可以在 pom 中指定 <tagNameFormat>VERSION-@{project.version}</tagNameFormat>,并且在使用 --batch-mode 执行发布时不需要包含任何标记名称 属性。执行 release:branch 时是否有类似的 属性 用于格式化分支名称?

您可以使用内置的 ${project.version}(前缀为 $ 而不是 @ -- 后者似乎仅在 tagNameFormat 参数中可用)。请注意,如果您使用 ${project.version},该值可能会包含子字符串 SNAPSHOT。可能有几种方法可以删除该子字符串。一种方法是应用 the answer to this question 中提到的帮助插件,它使您可以访问版本的语义组件:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>parse-version</id>
        <goals>
          <goal>parse-version</goal>
        </goals>
      </execution>
    </executions>
</plugin>

然后就可以在命令行使用属性了:

mvn release:branch -DbranchName=VERSION-${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}

或者最好将 branchName 参数包含在插件配置中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <executions>
        <execution>
            <configuration>
                <branchName>VERSION-${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</branchName>
            </configuration>
            <goals>
                <goal>branch</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在这种情况下,您不需要在命令行上传递这些魔法属性。