当我使用maven-release-plugin发布分支时,为什么它会尝试从版本0创建分支?

时间:2014-05-07 18:33:01

标签: java maven svn maven-release-plugin

我正在使用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

我的root 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)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我也有这个问题。在受影响的项目中,我在验证阶段进行了自定义搜索和替换某些文件,我想在标记之前检查对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中的准则。

LATE EDIT:升级到maven 3.2后,这个解决方案似乎有所破解。我回到了我开始的地方。

答案 2 :(得分:1)

正如我上面的评论所说:

  

我清理了一切并且刚刚发布:自行准备并且成功没有问题。也许这是一个运行版本的错误:准备和发布:一起执行将导致此

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