2017-11-10 10 views
1

나는 github4 라이브러리에서 github api에 액세스하기 위해 암모나이트 스크립트를 작성 중이며 클래스 패스와 관련된 문제가있을 수 있습니다. 다음과 같이 스크립트의 간단한 버전은 다음과 같습니다Ammonite classpath가 Github4s와 충돌합니다 (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가 classpath에 무엇인가를 주입한다고 생각합니다. 그리고 그것은 github4를 깨뜨 렸습니다.

암모 나트 스크립트에서 더 깨끗한 클래스 경로를 가질 수있는 방법이 있습니까? 아니면이 문제를 해결할 수있는 다른 방법은 있습니까?

+0

문제는 'jawn-parser'입니다. github4s'0.16.0'은 jawn-parser 0.11.0이 필요한 circe (고양이 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 (상 by플)를 사용합니다. 그러나, 불안정한 버전의 암모나이트는 이미 새로운 버전의 상 ick약으로 옮겨졌으며, 차례로 턱 0.11을 사용합니다.

따라서 Ammonite unstable과 함께 AbstractMethodError 문제가 발생하지 않고 문제를 실행할 수있었습니다.

+0

예, 이후 버전의 턱을 사용하여 최신 Ammonite 버전에서 문제가 해결되었습니다. – makados