sbt 0.12.x の binary version について
今日の内容
- binary version ってなんだ
- ライブラリ使用者はどうすればいいんだ
- ライブラリ作者はどうすればいいんだ
scala のバイナリ互換性
- scala ではソースコードの互換性のほか、バイナリ互換性に気をつける必要がある
- 例えば 2.8系と 2.9系ではバイナリ互換性がない。
- よって、2.8系向けにコンパイルされたライブラリは 2.9 系のプロダクトに使用することはできない
- 使用すると -> NoClassFound, NoMethodFound 的なエラーで死ぬ
scala のライブラリは Java と違い、scala のバージョン込みで管理されている
- libraryDependencies += "com.example" % "utility_2.9.1" % "version"
- libraryDependencies += "com.example" %% "utility" % "version"
- %%
- 今使用しているScala のバージョンにあったライブラリが使用できる
binary version <- NEW!!
-
sbt 0.12.0 の変更点 | eed3si9n
- 知らないと多分はまる。
- 難しい話ではないけれど、まだドキュメントにちゃんと書かれていなかったりしてハマる(ハマリました)
- これから、scala 2.10, Play 2.1 対応をする際に知っておいたほうが良い。
binary version の振り方
- binary version は <major>.<minor> というバージョンの振り方。2.10.0 の場合は 2.10 (つまり scala 2.10 の間はバイナリ互換性は保証してくれる)
- 2.9 以前のものについては 2.9.1, 2.9.2 など、フルバージョンをそのままバイナリバージョンとする。
RC期間は例外
- 2.10.0-RCx の今はまだ 2.10.0-final とのバイナリ互換性は保証されていない。 binary version は 2.10.0-RCx となる。
まだ RC ですし
RC期間は scalaBinaryVersion を使用する(ライブラリ作成者)
- RC期間中、0.12.x を使っているなら scalaBinaryVersion := "2.10.0-RCx" 必須!
まとめ
- binary version について知っておきましょう。
- 2.10.0 が出たら sbt 0.12.0 を使ったほうが良さそう。0.11.xと0.12.xを使っている人がまじると混乱しそう。
- sbtのドキュメントはたまに読みなおそう。