maven-release-plugin标签创建

时间:2014-04-04 13:38:59

标签: java maven svn maven-release-plugin

我只是使用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>

1 个答案:

答案 0 :(得分:0)

是的,我找出了导致这种情况的原因,看看maven-release-manager的源代码。重写developerConnection值时,RewritePomsForReleasePhase类根据本地项目计算需要从developerConnectionUrl中删除的子目录数,以获取项目的根目录。现在这种方法存在两个问题:

  1. 无法保证本地深度与远程深度匹配。虽然这可能是最好的做法。
  2. 工作目录(来自mvn的地方)不一定要在项目的根目录中。
  3. 两者都适用于我的情况。我检查了项目两个比远程更深的目录。澄清: 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网址保持不变。将在下一个版本中确认这一点。