我只是使用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>
答案 0 :(得分:0)
是的,我找出了导致这种情况的原因,看看maven-release-manager的源代码。重写developerConnection
值时,RewritePomsForReleasePhase
类根据本地项目计算需要从developerConnectionUrl中删除的子目录数,以获取项目的根目录。现在这种方法存在两个问题:
两者都适用于我的情况。我检查了项目两个比远程更深的目录。澄清:
http://localhost/project/3. Implementation/02 Source code
已签出
D:\workspace\project
另外,我们有一个project-parent
目录,其中包含我们的父pom。
所以现在它通过查看本地结构(从工作目录,即项目父项,到项目目录)确定我们是1深,并将其应用于developerConnection网址。然后它在原始的developerConnection上使用结果执行子字符串,并在我的情况下以02 Source code
结束。
这么长的故事不长:当本地目录结构与远程目录结构不匹配时,maven-release-plugin无法正常工作。现在我必须检查服务器路径,并创建一个新的pom,或将父pom移动到项目根目录以使其工作...
编辑:将pom移动到项目基础目录可能会解决问题,使developerConnection网址保持不变。将在下一个版本中确认这一点。