6

我喜欢使用 Maven 和分布式 SCM,例如 Mercurial (BitBucket)。

然而,随着我的项目规模化和 Hg 存储库的增长,我发现 Maven Release 插件越来越难以使用。

主要问题是,当 amvn release:prepare被调用时,Maven 没有利用 Hg 的分布式特性,而是执行整个存储库的完整克隆以放入临时目录。

Fabrizio Giudici早在 2009 年 就很好地记录了这个问题http://weblogs.java.net/blog/fabriziogiudici/archive/2009/10/29/fixing-two-problems-maven-mercurial-hudson

我原以为 Sonatype 现在可能已经更新了插件,但是我们仍然需要在发布之前下载整个 repo。

我希望与 StackOverflow 社区联系,看看是否有其他人遇到过这个问题,以及是否有人想出新的方法来解决在 maven 发布时可怕的完整克隆。

4

1 回答 1

14

这就是我为避免使用 maven 对 mercurial 进行愚蠢的多重推动而采取的措施:

首先确保您使用正确版本的插件通过以下方式处理 mercurial 类型的 scm:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <tagNameFormat>@{project.version}</tagNameFormat>
    </configuration>
</plugin>

然后首先执行准备目标

mvn release:prepare -DautoVersionSubmodules=true -DreleaseVersion=x.x.x -DdevelopmentVersion=y.y.y-SNAPSHOT -DpushChanges=false

注意pushChanges=false属性

if all ok then
    hg push
    mvn release:perform
else
    mvn release:clean
    and have fun removing the changeset from local hg repo
endif
于 2012-08-08T14:09:15.020 回答