現象
scala(sbt)で今まで通っていたビルドが取らなくなった。
どうもjackson関係でこけているみたい。
java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase;
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.fasterxml.jackson.module.scala.ser.IteratorSerializerModule$class.$init$(IteratorSerializerModule.scala:70)
at com.fasterxml.jackson.module.scala.DefaultScalaModule.<init>(DefaultScalaModule.scala:19)
対策
-
このStackOverflowを参考にしました
- VerifyErrorはRuntime時とCompile時で用いたソースが異なっている時に起こる
-
jackson-databindの最新版2.6.0-rc3リリースで、
AsArraySelializerBase.java
のwithResolved
がdeprecatedになり、finalが付けられている sbtでコンパイルを行うと、最新版がresolveされて、compile時はjackson-databind:2.6.0-rc3が使用されていた
[info] +-com.fasterxml.jackson.module:jackson-module-scala_2.10:2.4.4 [S]
[info] | +-com.fasterxml.jackson.core:jackson-annotations:2.4.4 (evicted by: 2.6.0-rc3)
[info] | +-com.fasterxml.jackson.core:jackson-annotations:2.6.0-rc3
[info] | +-com.fasterxml.jackson.core:jackson-core:2.4.4 (evicted by: 2.6.0-rc3)
[info] | +-com.fasterxml.jackson.core:jackson-core:2.6.0-rc3
- sbtマニュアルに従って、overrideを禁止する
// Build.scalaの場合
dependencyOverrides ++= Set(
"com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
)
- jackson-databindのversionは適当に選んで下さい。最新なら
2.5.3
かと。
最後に
- sbtでのresolveは常に最新版を見に行くのでしょうか??ちょっとよくわからない...orz