参考资料官方文档中的一个测试用例。目前,我使用3.5 json4s。
object JsonLoader {
def parseJsonConfig[T: Manifest](filename: String): T = {
implicit lazy val formats: DefaultFormats = new DefaultFormats {
override val strictOptionParsing: Boolean = true
}
val inputStream = getClass.getResourceAsStream(filename)
val lines = try {
Source.fromInputStream(new BufferedInputStream(inputStream)).getLines.mkString
} catch {
case _: Exception => throw new Exception("config file not found")
}
parse(lines, useBigDecimalForDouble = false).extract[T]
}
}
Exception in thread "main" java.lang.AbstractMethodError
at org.json4s.DefaultFormats$class.$init$(Formats.scala:329)
at jp.co.yahoo.k2.i2i.optimizer.util.JsonLoader$$anon$1.<init>(JsonLoader.scala:16)
at jp.co.yahoo.k2.i2i.optimizer.util.JsonLoader$.parseJsonConfig(JsonLoader.scala:16)
有些人 遇到 同样的问题,但他们引用的是以前的版本.任何想法和建议都是感激的。
从 JAVA文档.
当应用程序试图调用一个抽象方法时抛出。通常情况下,这个错误会被编译器发现;只有当某个类的定义在当前执行的方法最后一次编译后发生了不兼容的变化,这个错误才会在运行时发生。
也就是说,代码是用一个版本的库json4s编译的,这个版本与你当前运行时版本的库相比,发生了断裂兼容性的变化。这个断点是在 org.json4s.DefaultFormats
.
这种情况通常发生在有多个依赖关系,包括瞬时依赖关系(依赖关系的依赖),对版本的要求不同。在这种情况下,构建工具会选择最高版本。
调试这种情况的最好方法是生成一个依赖树(这取决于你使用的构建工具),并检查json4s库的驱逐情况。