Lambdaカクテル

Common LISPが好きなWeb屋さんです 自宅サーバやフロントエンドもできます

SBTプロジェクトのバージョンに"-SNAPSHOT"を付加する理由

SBTに限らないことかもしれないが、g8のようなテンプレートを利用してSBTプロジェクトを作成すると、バージョン名のデフォルトがX.Y.Z-SNAPSHOTとなっていることがある。この理由が分かったのでメモ。

要点

  • Ivy2はローカルなレポジトリのキャッシュを保有し、管理している
  • このためSBTプロジェクトをPublishする場合、毎回バージョン番号を変えなければ変更が反映されない
  • X.Y.Z-SNAPSHOTのようなパターンでこの挙動が変更される

くわしく

SBTのページを見ていたらこのような記述を発見した。

The version number you select must end with SNAPSHOT, or you must change the version number each time you publish. Ivy maintains a cache, and it stores even local projects in that cache. If Ivy already has a version cached, it will not check the local repository for updates, unless the version number matches a changing pattern, and SNAPSHOT is one such pattern.

僕は以前もこの挙動でトラブルになったことがあった。何度build.sbtでの依存性の記述を変更しても全くレポジトリに反映されず、バージョンを変更してようやく解決したのである。g8でプロジェクトを生成した当初こそバージョン末尾の-SNAPSHOTが気になったものの、「そういうものだ」と思って見過してしまった。気になったその時にきちんと調べておくべきだったと後悔。「問題の種を発見したらドキュメントにはきちんと書いてあった」なんて事は時間も精力も無駄になるので、トリッキーな挙動はきっちり把握しておくべきだ。