6

私はMavenとMercurial(BitBucket)のような分散SCMを使うのが大好きです。

ただし、プロジェクトの規模を拡大し、Hgリポジトリーが大きくなるにつれて、Mavenリリースプラグインの操作がますます面倒になっています。

主な問題は、amvn release:prepareが呼び出されると、MavenがHgの分散性を利用せず、リポジトリ全体の完全なクローンを実行して一時ディレクトリに配置することです。

この問題は、2009年に FabrizioGiudiciによって非常によく文書化されていますhttp://weblogs.java.net/blog/fabriziogiudici/archive/2009/10/29/fixing-two-problems-maven-mercurial-hudson

Sonatypeがプラグインを更新したかもしれないと思っていたのですが、残念ながら、リリースする前にリポジトリ全体をダウンロードする必要があります。

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 に答える