Maven2 releaseプラグインでsnapshotへの依存を残したままリリースする
Maven2には releaseプラグインというかなり便利なものがある。これを使うと、バージョニングとかpom.xmlの書き換えとか、ソースコードリポジトリへのタギングとか、なんかもう色々なことが自動化できてしまって最高である。これだけでmavenで管理する価値もあろうというもの。
参考リンク:
- Maven Release plugin – Introduction
- \¬Ç@ÀHüå@æ6Í [XÌ©®»@Maven Release Plugin
- Maven Release Plugin - まとばと!
このreleaseプラグインは便利なのだが、たとえば依存ライブラリに "2.0-SNAPSHOT" みたいに、スナップショットへの依存が含まれているとエラーが出てリリースできない。これはいろいろと困るケースもある
- 依存ライブラリにSNAPSHOTが含まれているのは仕方ないとしても reportingプラグインぐらい許してよ...
- warパッケージングのプロジェクトの時に、edgeなライブラリを使いたい!困った...
- etc
で、これを解決する手順。以下の通り
SNAPSHOT のタイムスタンプを確認して固定する
まずはpom.xmlの依存を修正する。
mavenのスナップショットリポジトリをwebでブラウズするなどして
(旧) <version>2.0-beta-7-SNAPSHOT</version> (新) <version>2.0-beta-7-20080520.215205-8</version>
などと、特定のスナップショットリビジョンを指すように修正する。
releaseプラグインの設定を追加する
さらにpom.xmlにreleaseプラグインの設定を追加する
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.0-beta-7</version> <configuration> <allowTimestampedSnapshots>true</allowTimestampedSnapshots> ←ここ重要 <tagBase>....</tagBase> <goals>clean,deploy,site-deploy</goals> </configuration> </plugin>
あとの設定はいま本当に使ってるやつのコピペ(ドキュメント付きのプロジェクトなら goalsのsite-deployとかは事実上必須だと思う)
あとは普通に mvn release:prepare して release:perform
あとは同じ
$ mvn release:prepare . . $ mvn release:perform . .