[scala] java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved. 해결하기
scala 2015. 10. 16. 19:57scala 2.11.7 & springboot 1.3.0 SNAPSHOT & gradle을 사용하고 있으며, java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.
빌드시 다음과 같은 에러가 발생했다.
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;
원인은 scala jackson 모듈 컴파일시 withResolved 메소드 구현 이슈로 verify error가 발생했다.
scala jackson module(정확히 말하면 jackson-databind 2.6) 에서 새로운 api가 정의되었고, 이를 제대로 연동이 안되는 문제가 발생했다.
public abstract AsArraySerializerBase<T> withResolved(BeanProperty property,
TypeSerializer vts, JsonSerializer<?> elementSerializer,
Boolean unwrapSingle);
참고 자료 : https://github.com/FasterXML/jackson-module-scala/issues/214
gradle dependencies로 보면, spring boot 1.3.0 snapshot 빌드 버전의 jackson-databind 버전은 2.6.1 이다.
\--- com.fasterxml.jackson.module:jackson-module-scala_2.10:2.3.1
+--- org.scala-lang:scala-library:2.10.2 -> 2.11.5
+--- com.fasterxml.jackson.core:jackson-core:2.3.1 -> 2.6.1
+--- com.fasterxml.jackson.core:jackson-annotations:2.3.0 -> 2.6.1
+--- com.fasterxml.jackson.core:jackson-databind:2.3.1 -> 2.6.1 (*)
+--- com.thoughtworks.paranamer:paranamer:2.6
+--- com.google.code.findbugs:jsr305:2.0.1
\--- com.google.guava:guava:13.0.1
spring boot 1.2.6.RELEASE 버전으로는 정상적으로 spring boot가 실행되는데, jackson-databind 버전은 2.4.0 이다.
\--- com.fasterxml.jackson.module:jackson-module-scala_2.10:2.3.1
+--- org.scala-lang:scala-library:2.10.2 -> 2.11.5
+--- com.fasterxml.jackson.core:jackson-core:2.3.1 -> 2.4.6
+--- com.fasterxml.jackson.core:jackson-annotations:2.3.0 -> 2.4.0
+--- com.fasterxml.jackson.core:jackson-databind:2.3.1 -> 2.4.6 (*)
+--- com.thoughtworks.paranamer:paranamer:2.6
+--- com.google.code.findbugs:jsr305:2.0.1
\--- com.google.guava:guava:13.0.1
그래서, jackson version을 2.4.x로 바꿔봤더니. 잘 동작된다.
def jacksonVersion = '2.4.4'
configurations {
all*.exclude module : 'com.fasterxml.jackson.core:jackson-databind'
all*.exclude module : 'com.fasterxml.jackson.core:jackson-core'
all*.exclude module : 'com.fasterxml.jackson.core:jackson-annotations'
}dependencies { //..
compile "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}"
compile "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}"
compile "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" }
'scala' 카테고리의 다른 글
[spring boot] scala와 gradle 연동시 cool swapping (live reload) 되게 하기 (with intellij idea 14, 15) (0) | 2015.10.28 |
---|---|
scala + spring boot + gradle (0) | 2015.10.19 |
Play2/Play1 framework의 Schedule 작업 (0) | 2015.03.25 |
play2 (scala) jmx 사용하기 (0) | 2014.12.22 |
[scala] 생성자 만들기 - not enough arguments for constructor DefaultConsumer (0) | 2014.12.09 |