ググるだけが能じゃない(Scalaの小ネタ)
sbtのbuild.sbtへの依存関係の記述にからむ小ネタ
そこそこどうでもいいあらすじ
Scala+liftwebでMongoDBを使っています。初めはLiftのmapperを使っていたんだけど、スキーマレスとORマッピングの相性が悪いというか、そこに収まらない使い方をしたくなったのでcasbahを使うことにしました。
ビルドにはsbtを使っているんだけれど、依存関係の記述をどう記述するかでハマりました。Scalaのバージョンは2.9.1、Liftのバージョンは2.4。最終的に以下のようなbuild.sbtになった。
name := "nicoplus" version := "1.0.0" organization := "com.geekfield" scalaVersion := "2.9.1" scalacOptions += "-deprecation" seq(webSettings :_*) libraryDependencies ++= Seq( "net.liftweb" %% "lift-webkit" % "2.4" % "compile", "net.liftweb" %% "lift-mapper" % "2.4" % "compile", "net.liftweb" %% "lift-mongodb-record" % "2.4" % "compile", "org.mortbay.jetty" % "jetty" % "6.1.26" % "container, test", "junit" % "junit" % "4.7" % "test", "ch.qos.logback" % "logback-classic" % "0.9.26", "org.scala-tools.testing" %% "specs" % "1.6.9" % "test", "com.h2database" % "h2" % "1.2.147", "mysql" % "mysql-connector-java" % "5.1.20", "net.databinder" %% "dispatch-http" % "0.8.8", "net.databinder" %% "dispatch-oauth" % "0.8.8", "net.databinder" %% "dispatch-json" % "0.8.8", "net.databinder" %% "dispatch-http-json" % "0.8.8", "org.mongodb" %% "casbah" % "2.4.0" ) resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
「scala 2.9.1 casbah」でGoogle検索してヒットした記述を試しても、なかなかSBTで依存関係が解決できませんでした。
本論
どうもRuby gemとかGitHubとかあたりからこっち、最近のライブラリ界隈はバージョンの上がり方が早いです。参考になるブログはあっても「現在、使いたいライブラリのどのバージョンが、使いたい言語・フレームワークに対応しているか。どのリポジトリにあって、どう記述すればよいか」あたりのアップトゥデートな情報はGoogle検索で見つけづらいことがあります。ライブラリのサイトにすら載ってないことがあります。
っつーことで、「ブログどおりにbuild.sbtやpom.xmlを記述したのに依存関係が解決できないよー」というときはMaven RepositoryやSonatype OSS Maven Repositoryのサイトで使いたいライブラリを検索するとよいでしょう。
それだけのお話だったのさ。RubyとかPython界隈の人たちはどうしてるんでしょうね。依存関係に細かいバージョンまで記述するのはMaven系固有の事情なんでしょうか?