Mercurial Maven Release 插件问题

Posted

技术标签:

【中文标题】Mercurial Maven Release 插件问题【英文标题】:Mercurial Maven Release plugin problems 【发布时间】:2012-08-02 00:39:51 【问题描述】:

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

但是,随着我的项目规模扩大和 Hg 存储库的增长,我发现使用 Maven Release 插件越来越麻烦。

主要问题是,当调用 mvn 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。

我希望与 *** 社区联系,看看是否有其他人遇到此问题,以及是否有人提出了解决 maven 版本中可怕的完整克隆的新方法。

【问题讨论】:

你的 hg 仓库有多大? 它不是太大,但我可以看到稍后会出现问题。目前大约是 50mbs 【参考方案1】:

这就是我为避免使用 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

【讨论】:

嘿法里德,不错的一个...还没有尝试过,但标志看起来很有希望。下面的代码......应该是你建议我根据发生的情况执行的伪代码吗? 是的,它是伪的,但是您可以使用任何脚本工具(dos、shell、...)使用 maven 的返回错误代码来处理它 你好,如果它回答了请求,别忘了接受答案。 在出现错误时删除本地变更集有什么好玩的吗? “hg 回滚”不应该足够吗? 在大多数情况下是的,hg 回滚就足够了,可能需要一些轻微的手动文件删除。

以上是关于Mercurial Maven Release 插件问题的主要内容,如果未能解决你的问题,请参考以下文章

maven-release-plugin 先前版本的文档在哪里?我正在寻找版本 2.8.2

用于内部版本号的 Maven + Mercurial

maven snapshot和release版本的区别

maven.变成了-release

为啥 maven 不替换 maven-release-plugin 发布版本的环境变量?

maven中snapshot快照库和release发布库的区别和作用