使用 mvn shade 构建的 MaxMind GeoIp 依赖项 jackson-databind 中的 NoSuchMethodException
NoSuchMethodException in MaxMind GeoIp dependency jackson-databind built with mvn shade
我正在尝试 运行 MaxMind 的 geoIP 在 spark 任务中,但我从 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 的项目中。使用maven-shade-plugin 2.4
将jar编译成shaded 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 DB 运行s。该错误仅在 运行 作为 spark 任务时发生在生产中——在使用 maven-shade 打包之后。
maven-shade 插件配置:http://pastebin.com/QzrhM5Ee
阴影 jar 不包含 jackson-databind jar,而是包含 jar 中的所有 *.class 文件是否有意义?
从 com.fasterxml.jackson.core:jackson-databind
jar 的 2.2.0 版开始,以 JsonNodeFactory
和 List<JsonNode>
作为参数的 ArrayNode
构造函数的版本已被删除,所以这个看起来像 maxmind-db
库中的错误,因为它正在引入 jackson-databind
的 2.7.0 版,但(至少间接地)调用了一个过时的方法。
如果可能,您可以尝试通过显式包含在您的 pom 文件中来降低 jackson-databind
依赖性,如下所示:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
通过将以下重定位添加到阴影 jar 配置中解决了这个问题:
<relocation>
<pattern>com.fasterxml.jackson.core</pattern>
<shadedPattern>com.shaded.fasterxml.jackson.core</shadedPattern>
</relocation>
老实说,我无法使用引导我来到这里的 or from , so I ended up just downgrading com.maxmind.geoip2
as was the latest suggestion from the Github issue thread 进行此操作,但它起作用了!
<!-- Using an old version b/c https://github.com/maxmind/GeoIP2-java/issues/57 -->
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.5.0</version>
</dependency>
我正在尝试 运行 MaxMind 的 geoIP 在 spark 任务中,但我从 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 的项目中。使用maven-shade-plugin 2.4
将jar编译成shaded 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 DB 运行s。该错误仅在 运行 作为 spark 任务时发生在生产中——在使用 maven-shade 打包之后。
maven-shade 插件配置:http://pastebin.com/QzrhM5Ee
阴影 jar 不包含 jackson-databind jar,而是包含 jar 中的所有 *.class 文件是否有意义?
从 com.fasterxml.jackson.core:jackson-databind
jar 的 2.2.0 版开始,以 JsonNodeFactory
和 List<JsonNode>
作为参数的 ArrayNode
构造函数的版本已被删除,所以这个看起来像 maxmind-db
库中的错误,因为它正在引入 jackson-databind
的 2.7.0 版,但(至少间接地)调用了一个过时的方法。
如果可能,您可以尝试通过显式包含在您的 pom 文件中来降低 jackson-databind
依赖性,如下所示:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
通过将以下重定位添加到阴影 jar 配置中解决了这个问题:
<relocation>
<pattern>com.fasterxml.jackson.core</pattern>
<shadedPattern>com.shaded.fasterxml.jackson.core</shadedPattern>
</relocation>
老实说,我无法使用引导我来到这里的 com.maxmind.geoip2
as was the latest suggestion from the Github issue thread 进行此操作,但它起作用了!
<!-- Using an old version b/c https://github.com/maxmind/GeoIP2-java/issues/57 -->
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.5.0</version>
</dependency>