/ / Fehler beim Erstellen der JAR-Datei mit Eclipse [Duplikat] - Java, Eclipse, Maven, Jar, noclassdeffounderror

Fehler beim Erstellen der JAR-Datei mit Eclipse [Duplikat] - Java, Eclipse, Maven, Jar, noclassdeffounderror

Also habe ich ein Projekt auf Eclipse erstellt, und ich möchte damit eine JAR-Datei erstellen. Der Projektordner enthält folgende Ordner:

  • src (enthält zwei Pakete)
  • JRE-Systembibliotheken
  • Referenzierte Bibliotheken ("jasept-1.9.2.jar" und "json_simple-1.1.jar")
  • libs (wieder: "jasept-1.9.2.jar" und "json_simple-1.1.jar")
  • Ressourcen (mit Bildern und Dateien)

Wenn ich gehe zu: rklick auf den Namen des Projekts -> Eigenschaften -> Java Build Path -> Bibliotheken

Ich sehe beide Bibliotheken korrekt zum Build-Pfad hinzugefügt.

Dann gehe ich zu rclick auf Project Name -> exportieren-> JAR-Datei und hier exportiere ich alles (nur um sicher zu gehen ..!). Dann lege ich die MainClass als Einstiegspunkt und dann wird die JAR-Datei ohne Probleme erstellt.

Wenn ich die JAR-Datei (registry.jar) entpacke, sehe ich, dass sie alles enthält, was sie benötigt: [package1, package2, META-INF, libs, Ressourcen, .classpath, .project]

Auch der .classpath ist korrekt (zumindest scheint mir .. nicht 100% sicher!):

   <?xml version="1.0" encoding="utf-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry exported="true" kind="lib" path="libs/jasypt-1.9.2.jar"/>
<classpathentry exported="true" kind="lib" path="libs/json_simple-1.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

ABER DANN, wenn ich gehe, um die Datei registry.jar von der Befehlszeile (sowohl Windows als auch Ubuntu) auszuführen, so:

java -jar registry.jar

Ich bekomme:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
at ...
at ...
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
at java.net.URLClassLoader$1.run<Unknown Source>
at ...
at ...
... lots more

Das Programm kompiliert und funktioniert perfekt in Eclipse. Ich kann nur nicht herausfinden, was das Problem ist ...

Antworten:

0 für die Antwort № 1

Das .classpath Datei hat keine Bedeutung für Java. Es wird nur von Eclipse verwendet. Java erkennt nicht, dass die benötigten Bibliotheken unter der lib Eintrag in der Jar-Datei.

Sie müssen den Pfad der Bibliotheken über den Befehl einschließen:

java -jar registry.jar -cp lib

wo in diesem Fall lib ist ein Ordner neben dem exportierten Jar.

Wenn Sie Maven verwenden, können Sie mit dem Assembly-Plugin eine ausführbare Datei erzeugen Wie kann ich eine ausführbare JAR mit Abhängigkeiten mit Maven erstellen?.