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 文件的&lt;developerConnection&gt; 部分吗?或者你是从 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

如何在不创建 scm 标签的情况下进行 Maven 发布?

在 Git 中使用 maven-release-plugin

使用 maven-release-plugin 转换术语

maven-release-plugin 和表达式的问题