github4sライブラリを使用してgithub apiにアクセスする際に、アンモナイトスクリプトを作成していて、おそらくclasspathで問題が発生しています。スクリプトの簡単なバージョンは次のとおりです。Ammonite classpathがGithub4sと衝突する(java.lang.AbstractMethodError)
import $ivy.`com.47deg::github4s:0.17.0`, github4s.Github, github4s.Github._, github4s.jvm.Implicits._, scalaj.http.HttpResponse
val listCommits = Github().repos.listCommits("lihaoyi", "ammonite")
listCommits.exec[cats.Id, HttpResponse[String]]() match {
case Left(e) => println(s"Something went wrong: ${e.getMessage}")
case Right(r) => r.result.foreach { commit => println(s"${commit.sha}:
${commit.message.take(35)}") }
}
それはほとんどgithub4sチュートリアルからコピーされ、それがで失敗しています:
java.lang.AbstractMethodError
jawn.CharBasedParser.parseString(CharBasedParser.scala:90)
jawn.CharBasedParser.parseString$(CharBasedParser.scala:87)
jawn.StringParser.parseString(StringParser.scala:15)
jawn.Parser.rparse(Parser.scala:428)
jawn.Parser.parse(Parser.scala:337)
jawn.SyncParser.parse(SyncParser.scala:24)
jawn.SupportParser.$anonfun$parseFromString$1(SupportParser.scala:15)
jawn.SupportParser.parseFromString(SupportParser.scala:15)
jawn.SupportParser.parseFromString$(SupportParser.scala:14)
io.circe.jawn.CirceSupportParser$.parseFromString(CirceSupportParser.scala:7)
io.circe.jawn.JawnParser.parse(JawnParser.scala:16)
io.circe.parser.package$.parse(package.scala:8)
io.circe.Parser.decode(Parser.scala:26)
io.circe.Parser.decode$(Parser.scala:25)
io.circe.parser.package$.decode(package.scala:5)
github4s.HttpRequestBuilderExtensionJVM.decodeEntity(HttpRequestBuilderExtensionJVM.scala:89)
github4s.HttpRequestBuilderExtensionJVM.decodeEntity$(HttpRequestBuilderExtensionJVM.scala:88)
github4s.jvm.Implicits$.decodeEntity(Implicits.scala:21)
全く同じコードが行う簡単なSBTプロジェクトで動作します私はAmmoniteがクラスパスに何かを注入し、それがgithub4を破壊すると思う。
アンモナイトスクリプトでクリーンなクラスパスを使用する方法はありますか、それ以外はどうすればこの問題を回避できますか?
ここで問題となるのは 'jawn-parser'です。 github4s '0.16.0'は、jawn-parser 0.11.0を必要とするcirce(cats 1.0)が必要です。 sbt 1.0にはjawn-parser 0.10.4が必要で、jawn-parser 0.10.4と0.11.0の間にはバイナリの非互換性があります。 – Fede