tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

maven-release-pluginの実行の仕方

あまり自信がないけど、こんな感じだと思う。
手順を間違えると変なエラーがでるのでなかなか手強い。

準備

カレント以下の全てのファイルをコミットしておく。
コミット漏れがあると容赦なくエラーになる。

リリース準備ができているか確認

release:prepareのオプションに-DdryRunを付けることである程度の事前チェックができる。
pom.xmlをいじった後のリリースでは必ずやっておく方が吉。

mvn -DdryRun=true release:prepare
実行に失敗した場合

エラーをみながら問題を解決する。
再度release:prepareを実行する前にはrelease:cleanを実行しておく。

mvn release:clean
実行に成功した場合

一度きれいにするため、失敗時と同様にrelease:cleanを実行しておく。

mvn release:clean

リリース準備を行う

今度は-DdryRun=trueを付けずに実行する。SCMへのコミットも行われる。

mvn release:prepare
実行に失敗した場合

release:prepare実行前の状態にコミットし直す。

mvn release:rollback

SCM上のタグは消されないので手動で削除する。
削除後、ローカルと齟齬が起きるので合わせる(以下はSubversionの場合)。

svn update

このsvn updateを行っていないと、次回実行時にリモートに存在しないファイルなのに"already exists"というエラーが出てくるので注意。

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to tag SCM
Provider message:
The svn tag command failed.
Command output:
svn: Commit failed (details follow):
svn: File '/repos/test/tags/hoge-1.0.0/.settings/org.eclipse.jdt.core.prefs' already exists

追記:
このalready existsというエラーは別件でも出るらしい。

maven-release-pluginの2.0-beta-9からはremoteTaggingというオプションが増えており、svnクライアントが1.5.1以降ならtrue(デフォルト値)、1.5.0以前ならfalseにすると正常に動作するらしい。でも僕の環境ではsvn 1.6.2でtrueにしても動かなかったので、結局、2.0-beta-8に戻して動かしている。

リリースを行う

mvn release:perform