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>
在这种情况下,您不需要在命令行上传递这些魔法属性。
当执行 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>
在这种情况下,您不需要在命令行上传递这些魔法属性。