2017-03-01 2 views
0

Ich bin eine Software mit Jackson zu entwickeln, aber total stecken bleiben ... Wenn ich das Feder-Boot-Programm mit java -jar <MY_APPLICATION>.jar Befehl ausführen, bekam ich folgende Fehlermeldung führt:jackson IllegalAccessError sogar mit den gleichen Versionen

... 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.fasterxml.jackson.databind.ObjectMapper]: Factory method 'jacksonObjectMapper' threw exception; nested exception is 
java.lang.IllegalAccessError: tried to access method com.fasterxml.jackson.databind.ser.std.StdSerializer.<init>(Ljava/lang/Class;)V from class com.fasterxml.jackson.datatype.jsr310.JavaTimeModule 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
     ... 84 more 
Caused by: java.lang.IllegalAccessError: tried to access method com.fasterxml.jackson.databind.ser.std.StdSerializer.<init>(Ljava/lang/Class;)V from class com.fasterxml.jackson.datatype.jsr310.JavaTimeModule 
     at com.fasterxml.jackson.datatype.jsr310.JavaTimeModule.<init>(JavaTimeModule.java:159) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
     at java.lang.Class.newInstance(Class.java:442) 
     at org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:78) 
     at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.registerWellKnownModulesIfAvailable(Jackson2ObjectMapperBuilder.java:719) 
     at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.configure(Jackson2ObjectMapperBuilder.java:572) 
     at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:554) 
     at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration.jacksonObjectMapper(JacksonAutoConfiguration.java:87) 
     at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration$$EnhancerBySpringCGLIB$$2434a0bb.CGLIB$jacksonObjectMapper$0(<generated>) 
     at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration$$EnhancerBySpringCGLIB$$2434a0bb$$FastClassBySpringCGLIB$$d685921f.invoke(<generated>) 
     at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
     at org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration$$EnhancerBySpringCGLIB$$2434a0bb.jacksonObjectMapper(<generated>) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
     ... 85 more 

Es gibt mehr Fehlermeldungen über den Fehler, aber ich denke, die wichtige Nachricht ist , die ich weiß, dass es nicht allgemein passieren kann.

ich bestätigt, dass die Jackson-Module in der gleichen Version sind (2.6.5, die vom Frühling-boot die Abhängigkeit kommt), und Jacksons Codehaus ist nicht inbegriffen:

$ mvn dependency:tree -Dverbose -Dincluces=com.fasterxml.jackson.core | grep -v omitted 

... 

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ patriot-fdc-web --- 
[INFO] <MY_GROUP>:<MY_APPLICATION_A>:war:0.3.9-SNAPSHOT 
[INFO] +- <MY_GROUP>:<MY_APPLICATION_B>:jar:0.3.9-SNAPSHOT:compile 
[INFO] | \- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.6.5:compile 
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.6.5:compile 
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:1.3.3.RELEASE:compile 
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.6.5:compile (version managed from 2.4.2) 
[INFO]  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.5:compile (version managed from 2.6.0) 

Kann ein solches Problem jemand begegnen? Kann jemand irgendeine Lösung oder Möglichkeit für den Fehler vorschlagen? Vielen Dank im Voraus.

Antwort

0

Ich habe die Ursache gefunden.

Die Abhängigkeit enthalten calcite-avartica Artefakt, und es hat einen schattierten Jackson in es mit Version 2.1.1. Deshalb kann ich die Abhängigkeit von mvn dependency:tree nicht finden. Ich habe es durch Debugging aus der Ferne gefunden, indem ich gesehen habe, woher StdSerializer stammt. https://issues.apache.org/jira/browse/CALCITE-1110

Avartica 1.9.0 oder später stört uns möglicherweise nicht. Ich habe nur calcite-core und calcite-avartica ausgeschlossen und schließlich hat es gut funktioniert.

Verwandte Themen