2017-11-10 16 views
1

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を破壊すると思う。

アンモナイトスクリプトでクリーンなクラスパスを使用する方法はありますか、それ以外はどうすればこの問題を回避できますか?

+0

ここで問題となるのは '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

答えて

0

私はあなたと同じ問題を抱えていました。ここで、私が考えたもの:

アンモナイト1.0.3は実際に(間接的に)顎0.10.4(アップリケ)を使用しています。しかし、不安定なバージョンのAmmoniteはすでに新しいバージョンのUpickleに移行されていますが、順番に顎0.11が使用されます。

だからAmmonite unstableと私はAbstractMethodError問題に実行せずに私の問題を実行することができました。

+0

はい、この問題は、後のバージョンの顎を使用して最新のAmmoniteバージョンで修正されています – makados