2016-01-23 7 views
8

私はsparkタスクでMaxMindのgeoIPを実行しようとしていますが、maxmindコールからjackson-databindライブラリへのNoSuchMethodExceptionを取得しています。私はmvn除外を使用して、他のすべてのバージョンのjackson-databindを削除しましたが、mvnをクリーンにした後もエラーは解決しません。私は何が欠けていますか?MaxMind GeoIp依存のNoSuchMethodException mvnシェードで構築されたjackson-databind

ない依存関係の競合:

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で実行されるスケーラベースのプロジェクトに組み込まれています。ジャーのmaven-シェードプラグインを使用して日陰瓶にコンパイルされた2.4

編集:ここでは https://drive.google.com/file/d/0B2ZVKNsRXgTbeUdEU2ZhM2J3dmc/view?usp=sharing

ジャクソン、データバインドのためのgrepの結果です: ここ影瓶の瓶のTVFのための完全な出力です: 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

とArrayNode:maxmindのGeoIP DBを初期化し、照会 /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

はテストで正常に実行されます。このエラーは、sparkタスクとして実行された場合にのみ、生産時に発生します。これは、maven-shadeを使用してパッケージ化された後です。

のmaven-シェードプラグインの設定:http://pastebin.com/QzrhM5Ee

は、それが影付きのjarはジャクソンデータバインドjarファイルが含まれていますが、瓶内の* .classファイルのすべてのいないことを意味がありますか?

+0

この問題は、 'spark-assembly.jar'の' jackson-databind'のバージョンに関連しているようです。ここで私の_ _ verbose_ trace: '[Loaded org.apache.spark。TaskContextImpl $$ anonfun $ markTaskCompletedファイルから$ 1:/home/vagrant/spark-1.6.1-bin-hadoop2.6/lib/spark-assembly-1.6.1-hadoop2.6.0.jar] ' – Stan

答えて

2

+0

Spark-ScalaでMaxmind GeoIP2を使用しようとしているときに同じ問題に直面しています。あなたはあなたの解決策について少し詳しく説明できますか?上記のシェード設定でSparkを再コンパイルしましたか、それとも別のものですか? –

10

JsonNodeFactoryを取り、パラメータとしてList<JsonNode>com.fasterxml.jackson.core:jackson-databind jarファイルのバージョン2.2.0のように除去するので、それはバージョン2.7に引っ張っているので、これは、maxmind-dbライブラリのバグのように見えた。ArrayNodeコンストラクタのバージョン0のjackson-databindであるが、(少なくとも間接的に)廃止されたメソッドを呼び出す。

可能な場合は、明示的にそうようなあなたのポンポンファイルに含めることによって、あなたのjackson-databind依存関係をダウングレード試みることができる:

<relocation> <pattern>com.fasterxml.jackson.core</pattern> <shadedPattern>com.shaded.fasterxml.jackson.core</shadedPattern> </relocation> :これは影のjar設定に次の再配置を追加することで解決しました

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

それは私には見えますこれは2.7.0で追加されました(https://github.com/FasterXML/jackson-databind/commit/12e811240e7f492a7a0639730c59c4a0cac10578#diff-ff1cff3f8cbf4dab0ac0fdd2435b1b87R36)。 –

+0

私は訂正しました。私はコンストラクタが2.7.0で追加されたと思いますが、それは[2.1.0のままであり、2.2.0では消えました](http://grepcode.com/file_/repo1.maven.org/maven2/ com.fasterxml.jackson.core/jackson-databind/2.2.0/com/fasterxml/jackson/databind/node/ArrayNode.java /?v = diff&id2 = 2.1.0)。 – palimpsestor

+0

これは、mavenの依存関係にもかかわらず、そのバージョンの 'jackson-databind'が問題のコードを実行しているクラスローダーのクラスパスにないようです。 – palimpsestor

0

正直なところ、<relocation> to the shaded jar configまたはdowngrading jackson-databindでこれを処理できませんでしたので、私はと同様にダウングレードしました私をここに導いた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> 
関連する問題