【问题标题】:When I use the maven-release-plugin to release a branch, why does it try to create the branch from revision 0?当我使用 maven-release-plugin 发布分支时,为什么它会尝试从修订版 0 创建分支?
【发布时间】:2014-05-07 18:33:00
【问题描述】:

我正在使用 maven-release-plugin。我正在尝试发布一个分支,但它在尝试执行此命令时失败:

cmd.exe /X /C "svn --non-interactive copy --file C:\Users\USER~1\AppData\Local\Temp\maven-scm-711744598.commit --parents --revision 0 https://domain/svn/app/branches/2.4.8.x https://domain/svn/app/tags/App-2.4.8.1"

它给出了这个错误:

svn: E195012: Unable to find repository location for 'https://domain/svn/app/branches/2.4.8.x' in revision 0

我认为这是在准备目标中发生的,因为当它失败时它会说:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5:prepare

我问过一个svn专家,他说:

等等,为什么它试图从 r0 复制一些东西?根据定义,r0 中没有任何内容。 r0 始终是一个空存储库,第一个对象添加到 r1。这就是它失败的原因。问题是为什么 Maven 尝试了它。如果您为 'svn copy' 提供修订参数,那么您创建的分支/标签基于您指定的修订的源,因此源必须在该修订中存在(如果你不指定,你得到 HEAD,即最新版本)...至于那,我对 maven 或其插件一无所知

那么,为什么 maven 试图从修订版 0 复制?这是我运行的 maven 命令:

mvn --batch-mode release:prepare release:perform

我的根 pom 的 maven-release-plugin 定义如下:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <autoVersionSubmodules>true</autoVersionSubmodules>
                <developmentVersion>2.4.8.2-SNAPSHOT</developmentVersion>
                <releaseVersion>2.4.8.1</releaseVersion>
                <branchBase>https://domain/svn/app/branches</branchBase>
                <tagBase>https://domain/svn/app/tags</tagBase>
            </configuration>
        </plugin>

另外,我的 scm 标签看起来像这样:

<scm>
    <connection>scm:svn:https://domain/svn/app/branches/2.4.8.x</connection>
</scm>

我的 svn 版本是 1.8.5 (r1542147)

【问题讨论】:

  • 我清理了所有东西并运行了 release:prepare 并且它成功地没有问题。也许这是一个错误,同时运行 release:prepare 和 release:perform 会导致这种情况。

标签: java maven svn maven-release-plugin


【解决方案1】:

只是想添加这个迟到的答案,如果有人有同样的问题并且评论中的解决方案不起作用。
我们在多模块应用程序中遇到了同样的问题,只有我们的父 POM 有 SCM 标签(这在我们的其他应用程序中运行良好)。我们遇到了同样的错误,但可以通过将相应的 SCM 标签添加到每个子 POM 来解决它。我们从来不知道为什么会这样……

【讨论】:

    【解决方案2】:

    正如我在上面的评论中所说的:

    我清理了所有东西,然后自己运行了 release:prepare,它成功了,没有问题。也许这是一个错误,同时运行 release:prepare 和 release:perform 会导致这种情况

    自从单独运行这些命令后,我还没有遇到过这个问题。

    【讨论】:

      【解决方案3】:

      我也有这个问题。在受影响的项目中,我在验证阶段对一些文件进行了自定义搜索和替换,我想在标记之前检查对 Svn 的更改,因此我添加了一个自定义签入操作,如下所示:

              <plugin>
                  <artifactId>maven-release-plugin</artifactId>
                  <configuration>
                      <preparationGoals>clean verify scm:checkin -Dmessage="perform release"</preparationGoals>
                  </configuration>
              </plugin>
      

      这导致当发布插件尝试签入 pom 文件中的更改时,没有任何更改,因为它们已经由自定义操作提交。从而导致这个错误。

      我在自定义 scm:checkin 中添加了一个“包含”文件列表,其中仅包含我一直在篡改的文件,这为我解决了问题。

      生成的配置如下所示:

              <plugin>
                  <artifactId>maven-release-plugin</artifactId>
                  <configuration>
                      <preparationGoals>clean verify scm:checkin -Dmessage="perform release" -Dincludes="TwogWebUtilsGrailsPlugin.groovy,plugin.xml" -DconnectionType="connection"</preparationGoals>
                  </configuration>
              </plugin>
      

      我的自定义替换操作的原因是因为该项目是一个 Grails 插件,并且我遵循 this blog post 中的指南。

      后期编辑:升级到 maven 3.2 后,这个解决方案似乎坏了。我回到了我开始的地方。

      【讨论】:

        猜你喜欢
        • 2020-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-01
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        相关资源
        最近更新 更多