blazegraph / database

Blazegraph High Performance Graph Database
GNU General Public License v2.0
872 stars 170 forks source link

“NoSuchMethodErrors” due to multiple versions of com.fasterxml.jackson.core:jackson-core:jar #173

Open Bing-ok opened 3 years ago

Bing-ok commented 3 years ago

Issue description

Hi, there are multiple versions of com.fasterxml.jackson.core:jackson-core in _database-BLAZEGRAPH_2_1_6RC\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_6RC\rdf-properties, which will introduce a runtime error(i.e., "NoSuchMethodErrors") into _database-BLAZEGRAPH_2_1_6RC\rdf-properties.

1. com.fasterxml.jackson.core.JsonParser: com.fasterxml.jackson.core.JsonParser overrideStdFeatures(int,int) is invoked by _database-BLAZEGRAPH_2_1_6RC\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_6RC\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

  1. 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.
  2. 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.
  3. 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.
  4. Declare a direct dependency com.fasterxml.jackson.core:jackson-core:2.9.6 in the pom file of _database-BLAZEGRAPH_2_1_6RC\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
Bing-ok commented 3 years ago

@beebs-systap Could you please help me review this issue? Thank you very much.