Maven Release Plugin - release:branch - -DbranchName中的版本参数

时间:2017-03-28 19:03:17

标签: maven maven-release-plugin

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

例如,如果我在一个版本为1.0-SNAPSHOT的trunk中有一个项目,我想使用--batch-mode选项创建一个分支,并用当前项目版本指定-DbranchName(1.0-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时,是否存在用于格式化分支名称的类似属性?

1 个答案:

答案 0 :(得分:1)

您可以使用内置的${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>

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