database
database copied to clipboard
“NoSuchMethodErrors” due to multiple versions of com.fasterxml.jackson.core:jackson-core:jar
Issue description
Hi, there are multiple versions of com.fasterxml.jackson.core:jackson-core in database-BLAZEGRAPH_2_1_6_RC\rdf-properties. As shown in the following dependency tree, according to Maven's “nearest wins” strategy, only com.fasterxml.jackson.core:jackson-core:2.4.4 can be loaded, and com.fasterxml.jackson.core:jackson-core:2.9.6 will be shadowed.
However, several methods defined in shadowed version com.fasterxml.jackson.core:jackson-core:2.9.6 is referenced by client project via com.github.jsonld-java:jsonld-java:0.12.1, but missing in the actually loaded version com.fasterxml.jackson.core:jackson-core:2.4.4.
For instance, the following missing methods(defined in com.fasterxml.jackson.core:jackson-core:2.9.6) is actually referenced by database-BLAZEGRAPH_2_1_6_RC\rdf-properties, which will introduce a runtime error(i.e., "NoSuchMethodErrors") into database-BLAZEGRAPH_2_1_6_RC\rdf-properties.
1. com.fasterxml.jackson.core.JsonParser: com.fasterxml.jackson.core.JsonParser overrideStdFeatures(int,int) is invoked by database-BLAZEGRAPH_2_1_6_RC\rdf-properties via the following path:
paths------
<com.bigdata.rdf.ServiceProviderHook: void forceLoad()> database-BLAZEGRAPH_2_1_6_RC\rdf-properties\target\classes
<com.github.jsonldjava.shaded.com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection: java.util.Iterator iterator()> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection: void refreshIfEmpty()> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache: java.lang.Object get(java.lang.Object)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object get(java.lang.Object,int)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object scheduleRefresh(com.github.jsonldjava.shaded.com.google.common.cache.ReferenceEntry,java.lang.Object,int,java.lang.Object,long,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object refresh(java.lang.Object,int,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader,boolean)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: com.github.jsonldjava.shaded.com.google.common.util.concurrent.ListenableFuture loadAsync(java.lang.Object,int,com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$LoadingValueReference,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$LoadingValueReference: com.github.jsonldjava.shaded.com.google.common.util.concurrent.ListenableFuture loadFuture(java.lang.Object,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.utils.JarCacheStorage$1: java.lang.Object load(java.lang.Object)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.utils.JarCacheStorage$1: com.fasterxml.jackson.databind.JsonNode load(java.net.URL)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.fasterxml.jackson.databind.ObjectMapper: com.fasterxml.jackson.databind.JsonNode readTree(java.net.URL)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.ObjectMapper: com.fasterxml.jackson.databind.JsonNode _readTreeAndClose(com.fasterxml.jackson.core.JsonParser)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.DeserializationConfig: void initialize(com.fasterxml.jackson.core.JsonParser)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.core.JsonParser: com.fasterxml.jackson.core.JsonParser overrideStdFeatures(int,int)>
2. com.fasterxml.jackson.core.JsonParser: com.fasterxml.jackson.core.JsonParser overrideFormatFeatures(int,int) is invoked by database-BLAZEGRAPH_2_1_6_RC\rdf-properties via the following path:
paths------
<com.bigdata.rdf.ServiceProviderHook: void forceLoad()> database-BLAZEGRAPH_2_1_6_RC\rdf-properties\target\classes
<com.github.jsonldjava.shaded.com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection: java.util.Iterator iterator()> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.collect.AbstractMapBasedMultimap$WrappedCollection: void refreshIfEmpty()> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache: java.lang.Object get(java.lang.Object)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object get(java.lang.Object,int)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object scheduleRefresh(com.github.jsonldjava.shaded.com.google.common.cache.ReferenceEntry,java.lang.Object,int,java.lang.Object,long,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: java.lang.Object refresh(java.lang.Object,int,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader,boolean)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$Segment: com.github.jsonldjava.shaded.com.google.common.util.concurrent.ListenableFuture loadAsync(java.lang.Object,int,com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$LoadingValueReference,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.shaded.com.google.common.cache.LocalCache$LoadingValueReference: com.github.jsonldjava.shaded.com.google.common.util.concurrent.ListenableFuture loadFuture(java.lang.Object,com.github.jsonldjava.shaded.com.google.common.cache.CacheLoader)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.utils.JarCacheStorage$1: java.lang.Object load(java.lang.Object)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.github.jsonldjava.utils.JarCacheStorage$1: com.fasterxml.jackson.databind.JsonNode load(java.net.URL)> Repositories\com\github\jsonld-java\jsonld-java\0.12.1\jsonld-java-0.12.1.jar
<com.fasterxml.jackson.databind.ObjectMapper: com.fasterxml.jackson.databind.JsonNode readTree(java.net.URL)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.ObjectMapper: com.fasterxml.jackson.databind.JsonNode _readTreeAndClose(com.fasterxml.jackson.core.JsonParser)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.DeserializationConfig: void initialize(com.fasterxml.jackson.core.JsonParser)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar
<com.fasterxml.jackson.core.JsonParser: com.fasterxml.jackson.core.JsonParser overrideFormatFeatures(int,int)>
Suggested fixing solutions
- Use configuration attribute <dependencyManagement> to unify the version of library com.fasterxml.jackson.core:jackson-core to be 2.9.6 in database-BLAZEGRAPH_2_1_6_RC\rdf-properties's pom file.
- Use <exclude> to exclude com.fasterxml.jackson.core:jackson-core:2.4.4 from the dependency tree, so that version 2.9.6 will be loaded.
- Upgrade dependency com.github.jsonld-java:jsonld-java from 0.12.1 to 0.12.2. Because the newer version com.github.jsonld-java:jsonld-java:0.12.2 does not invoke the above missing method, such upgrading can solve the problem.
- Declare a direct dependency com.fasterxml.jackson.core:jackson-core:2.9.6 in the pom file of database-BLAZEGRAPH_2_1_6_RC\rdf-properties to upgrade version from 2.4.4 to 2.9.6.
Please let me know which solution do you prefer? I can submit a PR to fix it.
Thank you very much for your attention. Best regards,
Dependency tree----
[INFO] com.blazegraph:rdf-properties:jar:2.1.6-SNAPSHOT
[INFO] +- commons-io:commons-io:jar:2.1:compile
[INFO] +- org.openrdf.sesame:sesame-util:jar:2.8.11:compile
[INFO] | +- com.google.guava:guava:jar:18.0:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO] +- org.openrdf.sesame:sesame-rio-rdfxml:jar:2.8.11:compile
[INFO] | +- org.openrdf.sesame:sesame-model:jar:2.8.11:compile
[INFO] | | \- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | \- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-datatypes:jar:2.8.11:runtime
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | \- (org.openrdf.sesame:sesame-util:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-languages:jar:2.8.11:runtime
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | \- (org.openrdf.sesame:sesame-util:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | \- (commons-io:commons-io:jar:2.4:compile - omitted for conflict with 2.1)
[INFO] +- org.openrdf.sesame:sesame-queryresultio-sparqljson:jar:2.8.11:compile
[INFO] | +- org.openrdf.sesame:sesame-queryresultio-api:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-query:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | \- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-query:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | \- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.4.4:compile
[INFO] +- com.github.jsonld-java:jsonld-java:jar:0.12.1:compile
[INFO] | +- (com.fasterxml.jackson.core:jackson-core:jar:2.9.6:compile - omitted for conflict with 2.4.4)
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.6:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | \- (com.fasterxml.jackson.core:jackson-core:jar:2.9.6:compile - omitted for conflict with 2.4.4)
[INFO] | +- (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for conflict with 1.7.10)
[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.25:runtime
[INFO] | | \- (org.slf4j:slf4j-api:jar:1.7.25:runtime - omitted for conflict with 1.7.10)
[INFO] | \- (commons-io:commons-io:jar:2.6:compile - omitted for conflict with 2.1)
[INFO] +- org.semarglproject:semargl-sesame:jar:0.6.1:compile
[INFO] | +- org.semarglproject:semargl-core:jar:0.6.1:compile
[INFO] | +- org.semarglproject:semargl-rdfa:jar:0.6.1:compile
[INFO] | | +- (org.semarglproject:semargl-core:jar:0.6.1:compile - omitted for duplicate)
[INFO] | | \- org.semarglproject:semargl-rdf:jar:0.6.1:compile
[INFO] | | \- (org.semarglproject:semargl-core:jar:0.6.1:compile - omitted for duplicate)
[INFO] | \- (org.openrdf.sesame:sesame-rio-api:jar:2.7.5:compile - omitted for conflict with 2.8.11)
[INFO] \- log4j:log4j:jar:1.2.17:compile
@beebs-systap Could you please help me review this issue? Thank you very much.