Scala2.10でハマった忘備録

はじめに

Scala2.10が出たので、と何も考えずに使ったらズボズボ嵌ったのでメモ代わりに。ただこの不都合は、時間が経てば解消される可能性が高いものもあるので、鵜呑みにしないで参考程度に。

補足(2013/03/01)

気付いたらscala-ioのバージョンが0.4.2に上がって、以下の問題は無くなっていた。あとSlickが使えるのもあって、普通に仕事で使っている。

binary version

詳しくはここ

http://d.hatena.ne.jp/tototoshi/20121122/1353516773

簡単に説明すると、現状のScalaは、コンパイラのメジャーバージョンが変わるとバイナリが非互換になるので、ライブラリの後ろにVersion番号が付いてる。scala-io-core_2.9.2とかね。

で、今までは2.9.2とか、マイナーバージョンまで付いてたけど、2.10から一律で2.10で呼び出すように変更になった。

2.10.xなら一律2.10で呼び出せて、ライブラリ作者も利用者も便利だね!はいいんだけど、かなり非互換な変更なので色々不都合が出てる。

特に重要なのはsbt。この記法に対応したのはsbt0.12.0から。という訳で2.10を使いたければsbtのアプデ必須。

β版使ってた人やlibrary作者の場合は、もう少し色々手間掛かるみたいなので、上のリンク読むと良いと思う。

scala-io

※なんか実体はレポジトリ間で同じバージョンなのに中身が違うとかいう話もあってカオスなので、留意しておいた方がいいと思う。以下はMaven Centralの話です

scala-ioはリッチなファイルI/O周りの処理を行うことができるScalaのライブラリ。

結論から言うと、2.10版のscala-ioには、依存する筈のライブラリが実は存在していない、というしょうもない(?)バグがある。

ただレポジトリによっては、同じバージョンでもこのバグが修正されているものもあるらしい?少なくともMaven Centralはアウト。

で、アウトな場合はexcludeすれば解決する。というか依存とか言いながら無くても動くじゃねーか…。

"com.github.scala-incubator.io" %% "scala-io-core" % "0.4.1" exclude("javax.transaction", "jta"),
"com.github.scala-incubator.io" %% "scala-io-file" % "0.4.1" exclude("javax.transaction", "jta")

結論

なんかバタバタしてるし、仕事で2.10使うのはちょっと待っといた方がいいかなぁなんて。WindowsのSP1のごとく、2.10.1が出てからが本番かな?w