Dropwizard の version up を実施したところ、Jackson で、下記のエラーが発生した。
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer
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:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.fasterxml.jackson.datatype.guava.GuavaModule.setupModule(GuavaModule.java:55)
at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:730)
at io.dropwizard.jackson.Jackson.configure(Jackson.java:56)
at io.dropwizard.jackson.Jackson.newObjectMapper(Jackson.java:27)
at io.dropwizard.setup.Bootstrap.<init>(Bootstrap.java:64)
at io.dropwizard.Application.run(Application.java:86)
at xyz.monotalk.festivals4partypeople.web.dropwizard.start.Festivals4PartyPeopleApplication.main(Festivals4PartyPeopleApplication.java:33)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
アプリケーションの pom.xml で定義していた Jackson の version と Dropzwizard が必要とする version が異なっていたために発生していた。アプリケーションでは、2.7.4
を定義していたが、Dropwizard の最新版 1.3.4
が 依存する Version は、2.9.6
で以下の通り、pom の dependency を書き換えた。
ReferenceTypeDeserializer
は 2.8
から追加されたクラス。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
ライブラリでの、NoClassDefFoundError
はほとんどは 依存ライブラリの version が古いか、新しいかのどちらかで発生するように思う。