2016-10-17 4 views
0

Ich habe versucht, die dynamodb-geo Bibliothek in meinem Projekt (Android) zu verwenden. Nach dem Lesen alles mögliche um das interent habe ich bemerkt, dass die lib jars nicht im classpath enthalten sind, ich habe es gemacht und bin zur code-house Object Mapper class not found exception gekommen. Dann erzwinge ich die Abhängigkeiten im Pom, um schnellerxml hinzuzufügen und die entsprechenden Importe zu ändern. Danach habe ich es verpackt (mvn clean package) und das entsprechende jar in den libs-Ordner meines android-projektes gelegt, in grandle eingerichtet und "play" gespielt.DynamoDB Geo Object Mapper Klasse nicht gefunden

Allerdings bekomme ich immer noch die nervige "Klasse nicht gefunden".

Die pom der DynamoDB geo enthält:

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

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.8.3</version> 
    </dependency> 

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

Und meine gradle Datei in Android enthält:

compile files('libs/dynamodb-geo-1.1.0.jar') 

Aber ich bin noch immer:

10-17 17:27:33.134 5139-5363/com.fivesigmagames.sdghunter E/AndroidRuntime: FATAL EXCEPTION: Thread-32098 
    Process: com.fivesigmagames.sdghunter, PID: 5139 
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/fasterxml/jackson/databind/ObjectMapper; 
     at com.amazonaws.geo.util.GeoJsonMapper.<clinit>(GeoJsonMapper.java:26) 
     at com.amazonaws.geo.dynamodb.internal.DynamoDBManager.putPoint(DynamoDBManager.java:125) 
     at com.amazonaws.geo.GeoDataManager.putPoint(GeoDataManager.java:132) 
     at com.fivesigmagames.sdghunter.repository.aws.AWSShareItemRepository$1.run(AWSShareItemRepository.java:58) 
     at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.fasterxml.jackson.databind.ObjectMapper" on path: DexPathList[[dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-unity-classes_bf479e7b8b71b5703bea6af2dcab41a7dfc4e91a-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-support-annotations-24.2.1_7a5f3f7e74247119444f4d43b2c522de9eab70fb-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-s2-geometry-java_4a01ca5c6a6c529340eae8f7f80c06b632fdefb5-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-retrofit-2.1.0_95833411f91cbb8e9410129091d258a780b3748c-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-okio-1.8.0_0cb7cee6746d84f62570817f36b8feb9fcf01356-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-okhttp-3.3.1_f8edaf579e8e4a295d221f114889d70d3e62eb9f-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-mapbox-java-services-1.3.1_a50eb5179d7320fcdc538c586ebd2f231b152887-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-logging-interceptor-3.3.1_699d973b2d0ba8bcd453fd52df4c55554a3d27f5-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-internal_impl-24.2.1_f38e546d683a020056b2318e9388188d85136c2f-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-internal_impl-24.2.1_8f4ea427bad833b1812bc9e939084c687a54e0d0-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-internal_impl-24.2.1_3609d9e6e631ae1ef0b5261e8250a3cf6f1193cf-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-internal_impl-24.2.1_280e40067a7d8e7f7f2bc98507cf0b17f26db6bf-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-internal_impl-24.2.1_008f1eca59ba22cef5240a40ab0f74834de26c4c-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-guava-r09_4880220368cf85c4cfb2f46fdedb8912a6629e2a-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-guava-18.0_e11ced1631feb7c9800790c98fd765d3bed1b86c-classes.dex", dex file "/data/data/com.fivesigmagames.sdghunter/files/instant-run/dex/slice-gson-2.7_792e0 

Wenn ich manuell (thourgh gradle) füge die drei jackson-abhängigkeiten hinzu Ich bekomme einen "doppelten" Eintragsfehler und es kompiliert nicht.

Danke für die Hilfe!

Antwort

0

Ich habe damit vor etwa 7 Monaten gekämpft. Das dynamodb-geo jar hat eine Abhängigkeit von einer alten Version von java aws-sdk (1.5.5). Diese 1.5.5-Version verwendet org.codehaus Paketnamen für die Jackson-Bibliotheken.

Später hat Jackson seine Paketnamen von org.codehaus zu com.fasterxml geändert. Neuere Versionen von java aws-sdk wurden aktualisiert, um diese neuen Paketnamen zu verwenden, aber dynamodb-geo hängt immer noch von 1.5.5 ab. Daher können Sie dieses alte JAR nicht in einer neueren Java AWS-SDK-Umgebung bereitstellen.

Beste Lösung ist es, ein neues Glas für dynamodb-geo selbst zu erstellen, wie Sie bereits versuchen. Aber du musst keine Abhängigkeiten mit Jackson hinzufügen, da diese von der aws sdk bereitgestellt werden. Sie können das AWS-dynamodb-geo-Repository auf github forken, die Eigenschaft aws-java-sdk.version in der Datei pom.xml aktualisieren, die Kompilierungsfehler beheben und mit Maven ein eigenes Jar erstellen.

Ich habe eine fork on Github erstellt, die genau dies tut. Mit dieser Gabel können Sie ganz einfach Ihr eigenes Glas herstellen.

Ich habe dieses Problem an AWS gemeldet und eine pull request on Github bereitgestellt. Leider wird die Bibliothek überhaupt nicht gepflegt, weshalb ich mich entschloss, sie nicht zu benutzen.

+0

Vielen Dank, tatsächlich habe ich das getan, nachdem ich Ihre PR gesehen habe. Aber immer noch nicht funktioniert Ich bin nicht sicher, warum ich immer noch die ClassNotFound-Ausnahme erwähnt (auch mit den Änderungen in der Pom vor der AWS-Version). Meine Lösung war es, mein eigenes Pseudo-Geo-Enabiling zu erstellen ... – buggy

Verwandte Themen