あまり自信がないけど、こんな感じだと思う。
手順を間違えると変なエラーがでるのでなかなか手強い。
準備
カレント以下の全てのファイルをコミットしておく。
コミット漏れがあると容赦なくエラーになる。
リリース準備ができているか確認
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というエラーは別件でも出るらしい。
- http://jira.codehaus.org/browse/SCM-406
- http://weblogs.java.net/blog/johnsmart/archive/2008/12/subversion_mave.html
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