2014-11-27 13 views
6

Ich habe eine einfache App erstellt, um das Szenario zu testen, das mit NoClassDefFoundError fehlschlägt.NoClassDefFoundError in verschachtelten jar (Android)

Nehmen wir zum Beispiel habe ich Test1 Android-Projekt mit Class TestClass mit einigen Methoden. Dieses Test1-Projekt wurde als test1.jar exportiert und nur Quellordner mit Class TestClass und classpath exportiert. project Dateien.

In einem anderen Android-Projekt Test2 habe ich diese test1.jar in meinem Ordner libs hinzugefügt. Und in diesem Test2-Projekt habe ich eine Klasse Test2Class, die Methoden der Klasse test1.jar aufruft.

Danach exportierte ich dieses Test2-Projekt als test2.jar Datei nach obigen Schritten. Wenn ich dieses test2.jar in einem anderen Projekt verwende, bekomme ich diesen obigen Fehler NoClassDefFoundError. Es ist das Szenario von Glas in einem Glas.

Irgendwo sollte ich etwas tun, damit ich auf ein Glas in einem Glas zugreifen kann.

Vielen Dank im Voraus.

+0

Haben Sie dies in Auftrag und Export in Build-Einstellungen des Projekts angezeigt? – Suvitruf

+0

Ya ich habe versucht, in der Reihenfolge zu addieren und zu exportieren. Und ebenso im Ordner libs. Ich glaube ich habe fast jede Kombination mit Order und Export ausprobiert: P. –

+0

ich denke, Fehler ist mit. Projektdatei. lösche es und überprüfe es und lass es mich wissen, wenn es funktioniert. – Dev

Antwort

0

Entfernen Sie die Gläser aus dem Java-Build-Pfad. Fügen Sie den neuen Ordnernamen als "libs" hinzu und geben Sie alle jars in diesem Ordner an. Die Anwendung wird gut laufen

+1

Ich habe immer noch den NoClassDefFoundError. –

+0

Bitte kreuzen Sie die Bibliotheken und den Bestell- und Exportbereich an. Dort sollte kein Glas vorhanden sein. Wenn ja, dann entferne es. Sollte es erneut zu einer Ausnahmebedingung kommen, senden Sie bitte den Screenshot für die Bibliotheken und Order and Export of Java Build Path. –

+0

Ya, wie Sie sagten, ich legte test1.jar-Datei in libs-Ordner von Test2-Projekt und stellte sicher, dass es nicht in Ordnung und exportieren und erstellt eine test2.jar .. Und so gut wie dieses test2.jar habe ich in einem anderen neuen Projekt libs-Ordner und stellte sicher, dass es nicht in Ordnung ist und exportieren. –

0

Try this:

Zum Projekt/Eigenschaften/Java Build Path/Auftrag und Export - Stellen Sie sicher, dass es eine Prüfung vor Android Abhängigkeiten und der Support-Bibliothek, wenn Sie es verwenden.

Markieren Sie alle Kontrollkästchen und klicken Sie auf Anwenden und bereinigen Sie das Projekt.

+0

Ja, ich habe das getan und versucht. Es hilft mir nicht. –

3

Probieren Sie dies Schritt für Schritt:
1. Remove all library Projekte dann sauber.
2. Gehe zum ersten Projekt Test1 Rechtsklick auf Eigenschaften -> Android. Überprüfen Sie Is Library (machen Sie es Bibliothek).
3. Gehen Sie zum zweiten Projekt Test2 Klicken Sie mit der rechten Maustaste auf Eigenschaften -> Android im Abschnitt Bibliothek wählen Sie Add -> Erste Projekt als Bibliothek hinzufügen.
4. Gehen Sie zum zweiten Projekt Test2 Klicken Sie mit der rechten Maustaste auf Eigenschaften -> Android. Überprüfen Sie auch Is Library.
5. Zum dritten gehen project C Rechtsklick auf Eigenschaften -> Android. Im Abschnitt Bibliothek wählen Sie Add -> Erste und zweite als Bibliothek hinzufügen. (Machen Sie nicht Proj C als Bibliothek)
6. Jetzt reinigen Sie alles und führen Proj C.
Bearbeiten: Sie können auch diesen Fehler Bug 405212 - Do not pack jars bundled inside a packed jar und Bug 361628 - Nested jars cannot be unpacked with Java 1.7 sehen. Versuchen Sie es wie oben beschrieben.

+0

Wenn Sie einen Patch für den Fehler anwenden möchten, können Sie [this] (https://bugs.eclipse.org/bugs/attachment.cgi?id=229472&action=edit) sehen. Auch siehe Eclipse [Hilfe Patch anwenden] (http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-68c.htm). –

0

Es kann nicht getan werden. Sie müssen die JAR-Dateien dekomprimieren und sie dem Klassenpfad hinzufügen, um die verschachtelte JAR-Datei verfügbar zu machen. Sehen Sie dieses Java bug als Referenz.

Es gibt mehrere Alternativen es in der richtigen Weise zu Handhabung, siehe this question zum Beispiel, die One-jar, Uber jar oder Shade

Hinweis empfiehlt: Dies ist relevant für Java, Andoid anders verhalten könnte, aber es scheint, wie es hat das gleiche Problem.

+0

Also das ist es. Es kann nicht dein Sprichwort sein. Die Ein-Jar- oder Uber-Jar-Methode ist etwas komplex und auch kein richtiges Tutorial. –

+0

Nein, es kann nicht mit gewöhnlichen Mitteln getan werden. Um zu überprüfen, eine Google-Suche nach "Java Nested Jars", finden Sie eine Menge Leute mit dem gleichen Problem. Die Problemumgehung besteht darin, die ZAR-Datei zu entpacken und sie entweder neu hinzuzufügen oder eine andere Lösung zu verwenden. – Fredrik

Verwandte Themen