我正在使用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)
答案 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)
正如我上面的评论所说:
我清理了一切并且刚刚发布:自行准备并且成功没有问题。也许这是一个运行版本的错误:准备和发布:一起执行将导致此
自从单独运行这些命令以来,我没有遇到过这个问题。