Scala + SBT + FinagleでNoSuchMethodException
Finagle試していたら
Finagleを使ってRPCのアプリを作っていてハマったのでメモ。
サンプルのFinagle-Httpを見ながら作っていたら実行時にException発生。
java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Ljava/lang/String;
ん?Twittet様のサンプルが実行できないだと?
何か私の設定がおかしいに違いない。
Dependenciesのミス
build.sbtはこんな感じ。
name := "HttpServer"
version := "1.0"
resolvers ++= Seq(
"Twitter Repository" at "http://maven.twttr.com/"
)
libraryDependencies ++= Seq(
"org.slf4j" % "slf4j-api" % "1.7.1",
"com.twitter" % "finagle-core" % "5.3.20",
"com.twitter" % "finagle-http" % "5.3.20"
)
う〜ん。Webの記事パクって書いたからライブラリのバージョンか? となって見てみると。
2014/03/05現時点でのバージョンは6.12.1
・ ・ ・
反省して修正・・・。GitHubページ見るべきだった。
"com.twitter" % "finagle-core" % "6.12.1",
"com.twitter" % "finagle-http" % "6.12.1"
再度実行するとまだ同じExceptionが発生。
ん?意味が分からん。
SBTの見ているScalaのバージョン修正
そういえば以前に会社の先輩がSBTの持っているScalaのバージョンもあるから依存関係多いから注意が必要と言って頂いたの思い出した!
先ほどと同じくbuild.sbtに以下追加。
scalaVersion := "2.10.3"
もうこれで大丈夫だと思いSBTのリフレッシュ実行。
するとエラーがまた出た・・・。
再びDependenciesのミス
libraryDependenciesの取得時にエラーが発生してライブラリが無いと起こられたのでMavenRepositoryを確認。
2.10.xでやる時は書かないと行けないんですね・・・。
"com.twitter" % "finagle-core_2.10" % "6.12.1",
"com.twitter" % "finagle-http_2.10" % "6.12.1"
これでなんとか実行できるように。
これに結構費やしてしまった・・・。
SBTは他にもいろいろつまづきそうな予感です。
また、つまづいたら書きます。