Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Bing-ok opened this issue Jul 4, 2020 · 2 comments

Comments

@Bing-ok
Copy link

Bing-ok commented Jul 4, 2020

Hi, there are multiple versions of com.fasterxml.jackson.core:jackson-core in cloudwatch_exporter-master. As shown in the following dependency tree, according to Maven's “nearest wins” strategy, only com.fasterxml.jackson.core:jackson-core:2.10.0.pr1 can be loaded, and com.fasterxml.jackson.core:jackson-core:2.6.7 will be shadowed.

As com.fasterxml.jackson.core:jackson-core:2.6.7 has not been loaded during the building process, several methods are missing. However, the missing methods:
1. com.fasterxml.jackson.core.base.GeneratorBase: com.fasterxml.jackson.core.json.JsonWriteContext getOutputContext()

Check for details of invocation
paths------
<io.prometheus.cloudwatch.CloudWatchCollector: void loadConfig(java.io.Reader,com.amazonaws.services.cloudwatch.AmazonCloudWatch,com.amazonaws.services.resourcegroupstaggingapi.AWSResourceGroupsTaggingAPI)> D:\githubProject\cloudwatch_exporter-master\target\classes
<io.prometheus.cloudwatch.CloudWatchCollector: void loadConfig(java.util.Map,com.amazonaws.services.cloudwatch.AmazonCloudWatch,com.amazonaws.services.resourcegroupstaggingapi.AWSResourceGroupsTaggingAPI)> D:\githubProject\cloudwatch_exporter-master\target\classes
<com.amazonaws.client.builder.AwsClientBuilder: void setRegion(java.lang.String)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.client.builder.AwsClientBuilder: com.amazonaws.client.builder.AwsClientBuilder withRegion(java.lang.String)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.client.builder.AwsClientBuilder: com.amazonaws.regions.Region getRegionObject(java.lang.String)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.regions.RegionUtils: com.amazonaws.regions.Region getRegion(java.lang.String)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.regions.RegionUtils: com.amazonaws.regions.RegionMetadata getRegionMetadata()> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.regions.RegionUtils: void initialize()> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.regions.RegionMetadataFactory: com.amazonaws.regions.RegionMetadata create()> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.partitions.PartitionsLoader: com.amazonaws.partitions.PartitionMetadataProvider build()> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.partitions.PartitionsLoader: com.amazonaws.partitions.model.Partitions loadPartitionFromStream(java.io.InputStream,java.lang.String)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.amazonaws.util.IOUtils: void closeQuietly(java.io.Closeable,org.apache.commons.logging.Log)> D:\Maven\Repositories\com\amazonaws\aws-java-sdk-core\1.11.708\aws-java-sdk-core-1.11.708.jar
<com.fasterxml.jackson.dataformat.cbor.CBORGenerator: void close()> D:\Maven\Repositories\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar
<com.fasterxml.jackson.core.base.GeneratorBase: com.fasterxml.jackson.core.json.JsonWriteContext getOutputContext()>

The above missing methods are actually referenced by cloudwatch_exporter-master, which will cause “NoSuchMethodErrors” at runtime.

Suggested fixing solutions:

  1. Declare direct dependency com.fasterxml.jackson.core:jackson-core to 2.6.7
  2. Use <<exclude> to exclude com.fasterxml.jackson.core:jackson-core:2.10.0.pr1 from the dependency tree
  3. Use configuration attribute <dependencyManagement> to unify the version of library com.fasterxml.jackson.core:jackson-core to be 2.6.7 in cloudwatch_exporter-master's pom file.

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----

click for details
[INFO] io.prometheus.cloudwatch:cloudwatch_exporter:jar:0.8.1-SNAPSHOT
[INFO] +- com.amazonaws:aws-java-sdk-cloudwatch:jar:1.11.708:compile
[INFO] | +- com.amazonaws:aws-java-sdk-core:jar:1.11.708:compile
[INFO] | | +- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.5.9:compile
[INFO] | | | +- org.apache.httpcomponents:httpcore:jar:4.4.11:compile
[INFO] | | | +- (commons-logging:commons-logging:jar:1.2:compile - omitted for conflict with 1.1.3)
[INFO] | | | \- commons-codec:commons-codec:jar:1.11:compile
[INFO] | | +- software.amazon.ion:ion-java:jar:1.0.2:compile
[INFO] | | +- (com.fasterxml.jackson.core:jackson-databind:jar:2.6.7.3:compile - omitted for conflict with 2.10.0.pr1)
[INFO] | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.6.7:compile
[INFO] | | | \- (com.fasterxml.jackson.core:jackson-core:jar:2.6.7:compile - omitted for duplicate)
[INFO] | | \- joda-time:joda-time:jar:2.8.1:compile
[INFO] | \- com.amazonaws:jmespath-java:jar:1.11.708:compile
[INFO] | \- (com.fasterxml.jackson.core:jackson-databind:jar:2.6.7.3:compile - omitted for duplicate)
[INFO] +- com.amazonaws:aws-java-sdk-sts:jar:1.11.708:compile
[INFO] | +- (com.amazonaws:aws-java-sdk-core:jar:1.11.708:compile - omitted for duplicate)
[INFO] | \- (com.amazonaws:jmespath-java:jar:1.11.708:compile - omitted for duplicate)
[INFO] +- com.amazonaws:aws-java-sdk-resourcegroupstaggingapi:jar:1.11.708:compile
[INFO] | +- (com.amazonaws:aws-java-sdk-core:jar:1.11.708:compile - omitted for duplicate)
[INFO] | \- (com.amazonaws:jmespath-java:jar:1.11.708:compile - omitted for duplicate)
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.0.pr1:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.0.pr1:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.10.0.pr1:compile
[INFO] +- org.yaml:snakeyaml:jar:1.17:compile
[INFO] +- io.prometheus:simpleclient:jar:0.7.0:compile
[INFO] +- io.prometheus:simpleclient_servlet:jar:0.7.0:compile
[INFO] | +- (io.prometheus:simpleclient:jar:0.7.0:compile - omitted for duplicate)
[INFO] | \- io.prometheus:simpleclient_common:jar:0.7.0:compile
[INFO] | \- (io.prometheus:simpleclient:jar:0.7.0:compile - omitted for duplicate)
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.4.15.v20190215:compile
[INFO] | \- org.eclipse.jetty:jetty-security:jar:9.4.15.v20190215:compile
[INFO] | \- org.eclipse.jetty:jetty-server:jar:9.4.15.v20190215:compile
[INFO] | +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] | +- org.eclipse.jetty:jetty-http:jar:9.4.15.v20190215:compile
[INFO] | | +- org.eclipse.jetty:jetty-util:jar:9.4.15.v20190215:compile
[INFO] | | \- (org.eclipse.jetty:jetty-io:jar:9.4.15.v20190215:compile - omitted for duplicate)
[INFO] | \- org.eclipse.jetty:jetty-io:jar:9.4.15.v20190215:compile
[INFO] | \- (org.eclipse.jetty:jetty-util:jar:9.4.15.v20190215:compile - omitted for duplicate)
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- org.mockito:mockito-all:jar:1.8.4:test
@brian-brazil
Copy link
Contributor

Please let me know which solution do you prefer? I can submit a PR to fix it.

My understanding is that the one AWS uses has security issues, but they can't upgrade for backwards compatibility reasons. Thus we force a newer version.

I'm not sure what to do here offhand, as we have had users ask that we not use the version that AWS requires.

@Bing-ok
Copy link
Author

Bing-ok commented Jan 29, 2021

I see that the project has migrated AWS SDK to v2 from PR-303, , so jackson-core version conflict is resolved. Thanks for your support!

@Bing-ok Bing-ok closed this as completed Jan 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants