Maven 发布插件在发布标签下添加主干文件夹以进行发布:准备目标
Posted
技术标签:
【中文标题】Maven 发布插件在发布标签下添加主干文件夹以进行发布:准备目标【英文标题】:Maven release plugin adding trunk folder under release tag for release:prepare goal 【发布时间】:2012-07-03 15:50:15 【问题描述】:我的 SCM 连接信息:
<scm>
<connection>scm:svn:https://repo/project/trunk</connection>
<developerConnection>scm:svn:https://repo/project/trunk</developerConnection>
</scm>
我的发布插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<tag>RC</tag>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
现在当我运行mvn release:prepare
时,它不会在tags/RC
下提交我的标记版本,而是在tags/RC/trunk
下提交。如何阻止它在RC
下添加trunk
?
【问题讨论】:
你配置了标签吗?如果您在 SVN 中使用默认布局,则无需配置。 如果不配置标签,则由开发者在准备发布时指定标签。我们不希望那样。我们只是想要标记当前版本,这意味着它已准备好生产。 那是完全错误的。该标签默认由 artifactId 加上版本创建。发布插件会询问您,但您可以接受默认值,但如果您在命令行上给出 -B,它将自动执行操作,无需任何用户交互,而是使用默认值(版本增量等)。 这仍然给开发人员留下了错误的余地。如果 POM 中有标签名称,那么它不会询问您要标记什么。除了仍然没有回答我的问题的事实,实际上与我想要的相反。我不希望它默认为 artifactId 加上版本。我每次都想要相同的标签。 每次都使用相同的标签是没有意义的,因为如果你通过 Maven 发布这将创建一个新版本并且与之相关是没有意义的。如果你有一个已发布的工件,pom 中只有一个标签名称,通常你有一个 SNAPSHOT 版本,这意味着将使用 scm 区域中的主干。 【参考方案1】:Brian,你可能是 Maven 不完整的release:rollback
功能的受害者。请参阅我的question on *** 及其答案。如果你的标签已经存在,Subversion(不是 Maven)会认为你想复制树干 inside 现有的标签。删除标签,它会工作 - 一次。再试一次,你会得到RC/trunk
。再试一次,你会收到来自 Subversion 的错误。
解决方案是在您尝试复制到标签之前先将其复制到svn delete
- 我们在release:perform
期间通过将几个插件绑定到deploy
阶段从 Maven 成功地做到了这一点。
基本上:
让release:prepare
做它的事情,创建一个具有唯一名称的标签。
将org.codehaus.mojo:exec-maven-plugin:exec
绑定到deploy
阶段,使其在release:perform
期间运行。将其配置为调用svn delete <path to RC tag>
。
将 maven-scm-plugin:branch
绑定到 deploy
以便使用 Maven 的 SCM 插件创建新标签。
这对我们有用,它还有一个额外的好处,就是它也为我们提供了独特的标签以供参考。最坏的情况,你可以忽略这些标签。
【讨论】:
我可以确认这是正确的答案(例如 SVN 中已经存在的发布标签)。以上是关于Maven 发布插件在发布标签下添加主干文件夹以进行发布:准备目标的主要内容,如果未能解决你的问题,请参考以下文章
使用 Maven 从 Bamboo 发布时在 SVN 标记中创建的多余主干子文件夹