2011年11月20日日曜日

Scala(sbt)でjoda-time 2.0を使う設定。

背景

Scala(ビルドツールはxsbt)でjoda-time 1.6を使っていて、
@xuwei_kさんのまさしくこの状況にハマりました。
joda timeのDateTimeのコンストラクタがScalaと相性悪い・・・と思ったら単なる勘違いだった件

jodatimeのコンストラクタをScalaから呼べないとおもったら、単に自分の勘違いだった件

scalatimeというjoda timeをScalaでラップしたようなライブラリがあるのですが、
それはおいておいて、とりあえずjoda time 2.0使おうと思ってちょっとはまったのでメモ的に記します。

設定

~/build.sbtに下記の設定をします。


libraryDependencies ++= Seq(
  "joda-time" % "joda-time" % "2.0",  //*1
  "org.joda" % "joda-convert" % "1.1"  //*2
)

*1は普通にjoda-time 2.0を取得する設定ですが、
*2を加えています。

*1だけですと、
error: error while loading DateTime, Missing dependency 'class
org.joda.convert.FromString', required by
/Users/xxxxx/.m2/
repository/joda-time/joda-time/2.0/joda-time-2.0.jar(org/joda/time/DateTime.class)

のようなエラーが出ます。

この原因は、

https://groups.google.com/d/topic/scala-user/aM4LNwNksXQ/discussion

によると、
「joda-convertはmavenのpom上ではOptionalであり、Javaでは取得できなくても動くけど、
Scalaだとすべてのclassが参照するclassはcompile時にclasspath上に存在しないといけないのでエラーになるよ」
とのこと(意訳)。

ということで、sbtでは*2を明示的に加えてあげる必要があります。

0 件のコメント:

コメントを投稿