gpt4 book ai didi

scala - 使用 mvn shade 构建的 MaxMind GeoIp 依赖 jackson-databind 中的 NoSuchMethodException

转载 作者:行者123 更新时间:2023-12-04 03:19:46 24 4
gpt4 key购买 nike

我正在尝试在 spark 任务中运行 MaxMind 的 geoIP,但是我从 maxmind 对 jackson-databind 库的调用中得到了 NoSuchMethodException。我已经使用 mvn 排除项删除了所有其他版本的 jackson-databind,但在 mvn clean 后错误仍然存​​在。我错过了什么?

没有依赖冲突:
mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core:jackson-databind
...
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ sift-etl ---
[INFO] com.sift.etl:sift-etl:jar:0.1.6
[INFO] \- com.maxmind.geoip2:geoip2:jar:2.6.0:compile
[INFO] \- com.maxmind.db:maxmind-db:jar:1.2.0:compile
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.7.0:compile

错误:
Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V
at com.maxmind.db.Decoder.decodeArray(Decoder.java:272)

编辑:我有很多 org.codehaus.jackson ,我是否也需要排除这些?如何解决命名空间的差异?

编辑:这是内置在 Apache Spark 中运行的基于 Scala 的项目中。 jar 使用 maven-shade-plugin 2.4 编译成阴影 jar

编辑:
这是阴影 jar 上 jar tvf 的完整输出:
https://drive.google.com/file/d/0B2ZVKNsRXgTbeUdEU2ZhM2J3dmc/view?usp=sharing

这是 jackson-databind 的 grep 结果:
0 Mon Jan 25 09:53:54 PST 2016 META-INF/maven/com.fasterxml.jackson.core/jackson-databind/
151 Mon Jan 25 09:53:54 PST 2016 META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties
5192 Mon Jan 25 09:53:54 PST 2016 META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml

和阵列节点:/usr/lib/jvm/sift-jdk1.8.0_66/bin/jar -tvf target/sift-etl-0.1.6-shaded.jar | grep ArrayNode
15060 Sat Jan 23 01:33:14 UTC 2016 shaded/parquet/org/codehaus/jackson/node/ArrayNode.class
1309 Sat Jan 23 01:33:18 UTC 2016 org/apache/lucene/index/DocumentsWriterDeleteQueue$QueryArrayNode.class
1645 Sat Jan 23 01:33:18 UTC 2016 org/apache/lucene/index/DocumentsWriterDeleteQueue$TermArrayNode.class
18145 Sat Jan 23 01:33:20 UTC 2016 com/fasterxml/jackson/databind/node/ArrayNode.class
1058 Sat Jan 23 01:33:22 UTC 2016 org/apache/commons/configuration/plist/XMLPropertyListConfiguration$ArrayNode.class

初始化和查询 maxmind GeoIP 数据库在测试中成功运行。该错误仅在作为 spark 任务运行时在生产中发生 - 在使用 maven-shade 打包之后。

maven-shade 插件配置:http://pastebin.com/QzrhM5Ee

阴影 jar 不包含 jackson-databind jar,而是包含 jar 中的所有 *.class 文件是否有意义?

最佳答案

ArrayNode的版本接受 JsonNodeFactory 的构造函数和一个 List<JsonNode>com.fasterxml.jackson.core:jackson-databind 的 2.2.0 版起删除了参数jar,所以这看起来像是 maxmind-db 中的一个错误库,因为它引入了 jackson-databind 的 2.7.0 版但是(至少间接地)调用过时的方法。

如果可能,您可以尝试降级您的 jackson-databind通过显式包含在您的 pom 文件中的依赖项,如下所示:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>

关于scala - 使用 mvn shade 构建的 MaxMind GeoIp 依赖 jackson-databind 中的 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com