maven-release-plugin 标签创建
Posted
技术标签:
【中文标题】maven-release-plugin 标签创建【英文标题】:maven-release-plugin tag creation 【发布时间】:2014-04-04 13:38:59 【问题描述】:我只是使用 maven-release-plugin 发布一个版本,很明显:) 我父pom中的scm配置如下:
<scm>
<developerConnection>scm:svn:http:/localhost/svn/project/trunk/project/3. Implementation/02 Source code</developerConnection>
</scm>
如您所见,在主干之后,我们还有几个文件夹(RUP 样式),然后才能到达源代码。
mvn release:prepare
导致以下 scm 配置:
<scm>
<developerConnection>scm:svn:http://localhost/svn/project/tags/project-1.0.0/02 Source code</developerConnection>
</scm>
因此,不知何故,maven-release-plugin 设法将trunk/project/3. Implementation/02 Source code
替换为tags/project-1.0.0/02 Source code
。
为什么不是tags/project-1.0.0
,正如我所料?如果我运行mvn release:perform
,插件将检查整个3. Implementation
目录。
供参考,我的插件定义如下:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5</version>
<configuration>
<tagBase>http://localhost/svn/project/tags</tagBase>
</configuration>
</plugin>
</plugins>
【问题讨论】:
您是说mvn release:prepare
更改了您的POM 文件的<developerConnection>
部分吗?或者你是从 Maven 调试中读到的?
是的,它在创建标签之前对其进行了更改并将其提交到主干。之后它也将其更改回原始值。
【参考方案1】:
是的,我通过查看 maven-release-manager 源代码找出了造成这种情况的原因。在重写developerConnection
值时,RewritePomsForReleasePhase
类会根据本地项目计算我们需要从 developerConnectionUrl 中删除的子目录数量,才能到达我们项目的根目录。现在这种方法有两个问题:
-
无法保证本地深度与远程深度匹配。虽然这可能是最佳做法。
工作目录(从中调用 mvn)不必位于项目的根目录中。
两者都适用于我的情况。我检查了项目的两个目录比远程目录更深。澄清:
http://localhost/project/3. Implementation/02 Source code
已签出到
D:\workspace\project
此外,我们有一个 project-parent
目录,其中包含我们的父 pom。
所以现在它通过查看本地结构(从工作目录,即项目父级到项目目录)确定我们是 1 深度,并将其应用于 developerConnection url。然后它在原始 developerConnection 上使用结果执行子字符串,并在我的情况下以 02 Source code
结束。
长话短说:当本地目录结构与远程目录结构不匹配时,maven-release-plugin 无法按预期工作。现在我必须检查服务器路径并创建一个新的 pom,或者将父 pom 移动到项目根目录以使其工作...
编辑:将 pom 移动到项目基础目录可能会解决问题,而使 developerConnection url 保持不变。将在下一个版本中确认这一点。
【讨论】:
以上是关于maven-release-plugin 标签创建的主要内容,如果未能解决你的问题,请参考以下文章
maven-release-plugin 可以在两个远程存储库中创建标签吗?
未能执行目标 org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare