NoClassDefFoundError-Jar-Fehler, für org/apache/poi/ss/usermodel/Blatt
Ich gesehen habe diese Frage eine Menge, aber ich kann immer noch nicht herausfinden, eine Lösung. Auch eine Lösung, die funktioniert für mich. Ich habe ein Projekt, das mit Apache POI, und ich machte Sie sicher, dass alle externen JARs. Das Projekt kompiliert und läuft einwandfrei in eclipse, aber wenn ich das jar mit "java -jar Test.jar
" ich bekomme diese Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Blatt
Ich bin mir nicht sicher, ob dies ist nützlich, Informationen, aber ich erstellte eine lib-Ordner für mein Projekt und legen Sie die poi-Bibliothek. Dies bedeutet, dass die dependcies sind in der JAR-Datei, wenn ich es schaffen, ich dachte, ich sollte dies erwähnen, da sah ich ein paar Lösungen, um nur mit Ihrem externen jars direkt neben Ihrem ausführbare jar-Datei. Ich habe auch versucht, meine Einstellung classpath auf das Verzeichnis des Projektes.
Was ich scheinbar falsch mache?
InformationsquelleAutor Taztingo | 2013-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Apache POI-JAR-Datei nicht auf dem runtime classpath befinden. Rebuild
Test.jar
mit dem folgenden manifest-Eintrag in derMANIFEST.MF
DateiSieht ok aus, prüfen Sie, ob ein newline-Zeichen am Ende der manifest-Datei. Überprüfen Sie auch, dass das manifest wurde korrekt aufgenommen (durch unjarring es zu einem temp-Ordner). Schließlich prüfen Sie, dass der Pfad zum poi-jar-Datei korrekt ist
Ich habe unjarred und überprüft das MANIFEST.MF-Datei. Die Datei enthalten war, es hatte ein Zeilenumbruch, und ich bin mir ziemlich sicher, dass der Pfad korrekt ist. Ist der classpath aus der MANIFEST-Datei oder aus dem Projekt-Verzeichnis?
Der classpath ist relativ, von wo aus die jar ausgeführt wird
Danke ich bin ein idiot. Mein code kompiliert, ein wenig weiter, so dass ich denke, ich habe nur gehört, alle poi-Gläser. Jetzt die jar-Datei in mein Projekt-Verzeichnis, weil es das externe jar. Gibt es eine Möglichkeit, dass zu verhindern, so dass der Benutzer führen Sie einfach die jar überall. Lassen Sie uns sagen, dass ich alle externen jars in meiner jar-Datei. Also in meinem Glas habe ich meine lib-Ordner. Gibt es eine Möglichkeit, die class-path Verweis, und nicht das Verzeichnis der jar ist?
InformationsquelleAutor Reimeus
Wenn die
java -jar [filename].jar
Befehl fehlschlägt, ist es fast immer aufgrund eines von zwei Dingen:Ihrem MANIFEST.MF ist Durcheinander und nicht Liste von Abhängigkeiten richtig. Stellen Sie sicher, dass alle jar-Abhängigkeiten in Ihrer manifest-Datei zeigen Sie auf Gläser, die relativ zum jar übergeordnete Verzeichnis.
Ihnen fehlt .die class-Dateien, entweder in Ihrer spezifischen jar-Datei oder in einem auf die Sie angewiesen sind. Sicherzustellen, dass Ihr Glas enthält
org/apache/poi/ss/usermodel/Sheet.class
oder Ihre manifest-Hierarchie Punkte zu ein Krug, enthält diese Klasse.InformationsquelleAutor CodeBlind
Müssen Sie classpath in der Jar-Datei die manifest-Datei.Siehe dieses offizielle doc
Ein Beispiel
Wollen wir um Klassen zu laden, die in MyUtils.jar in den class-path für den Einsatz in MyJar.jar. Diese beiden JAR-Dateien sind im selben Verzeichnis.
Zuerst erstellen wir eine Textdatei mit dem Namen
Manifest.txt
mit folgendem Inhalt:InformationsquelleAutor anubhava
Zunächst prüfen, ob Ihre Ziel-jar (
Test.jar
) ist ein fat-jar-Datei, die alle benötigten Abhängigkeiten.Sollten Sie Ihren
lib/
Ordner mit allen benötigten Abhängigkeiten (einschließlich Apache POI). Wenn das der Fall ist, tun, was andere vorgeschlagen, hinzuzufügen, Apache POI, um IhreMANIFEST.MF
.Darüber, dass Sie Ihre jar-Abhängigkeiten in einem separaten Ordner, wie Sie vorgeschlagen, das ist auch möglich. Stellen Sie sich Ihre Abhängigkeiten, wo gespeichert
lib/
Ordner außerhalb IhrerTest.jar
. Sie könnten Ihren code mit diesem Befehl:Es fügt einfach alle .jars in lib/Ordner in den classpath. In diesem Fall müssen Sie auch angeben, den Namen der Hauptklasse (vollständiger name).
InformationsquelleAutor Diego Pino
Ich habe auch dieses problem und versucht es google..
habe ich herausgefunden, dass ich Lesen Sie die Fehler-log -
Kann ich nicht speichern meiner Datei .xls-so
in meinem Fall nach dem Lesen der Fehler, die ich gefunden, dass eine jar-Datei fehlt
habe ich nur noch die jar-Datei poi-3.7-20101029 sich in den ext Ordner von meinem ireport
ex.YourIReportFolder/ireport/modules/ext-poi.x.x-xxxx
hoffe, das hilft 🙂
InformationsquelleAutor Myk Agustin