Ammonite 类路径与 Github4s 冲突 (java.lang.AbstractMethodError)
Ammonite classpath clashes with Github4s (java.lang.AbstractMethodError)
我正在编写一个 ammonite 脚本以与 Github4s 库一起使用以访问 github api 并且有一个问题,可能与类路径有关。脚本的简单版本如下:
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(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 在类路径中注入了一些东西并且它中断了 github4s。
有没有办法让菊石脚本中的类路径更清晰,或者我还能如何解决这个问题?
我遇到了和你一样的问题。在这里,我想的是:
Ammonite 1.0.3 确实(间接)使用了 jaws 0.10.4(通过 upickle)。然而,不稳定版本的 Ammonite 已经迁移到更新版本的 upickle,轮流使用 jaws 0.11.
因此,通过 Ammonite unstable,我能够 运行 我的问题,而无需 运行 进入 AbstractMethodError
问题。
我正在编写一个 ammonite 脚本以与 Github4s 库一起使用以访问 github api 并且有一个问题,可能与类路径有关。脚本的简单版本如下:
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(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 在类路径中注入了一些东西并且它中断了 github4s。
有没有办法让菊石脚本中的类路径更清晰,或者我还能如何解决这个问题?
我遇到了和你一样的问题。在这里,我想的是:
Ammonite 1.0.3 确实(间接)使用了 jaws 0.10.4(通过 upickle)。然而,不稳定版本的 Ammonite 已经迁移到更新版本的 upickle,轮流使用 jaws 0.11.
因此,通过 Ammonite unstable,我能够 运行 我的问题,而无需 运行 进入 AbstractMethodError
问题。