Maven2 releaseプラグインでsnapshotへの依存を残したままリリースする

Maven2には releaseプラグインというかなり便利なものがある。これを使うと、バージョニングとかpom.xmlの書き換えとか、ソースコードリポジトリへのタギングとか、なんかもう色々なことが自動化できてしまって最高である。これだけでmavenで管理する価値もあろうというもの。

参考リンク:

この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
.
.