Java: So importieren Sie eine JAR-Datei über die Befehlszeile

73

Ich versuche, eine Klasse (Hauptmethode) über die Befehlszeile (Windows) mit Java aufzurufen.
Die Klasse importiert andere Klassen (andere Gläser).

Ich erhalte immer "Klasse nicht gefundene Ausnahme" von einer Klasse, die mein Hauptprogramm importiert.

Folgendes habe ich versucht:

  • Fügen Sie eine CLASSPATH-Umgebung hinzu. var mit dem Pfad, in dem sich die referenzierte Bibliothek befindet (funktioniert nicht)

  • Ich habe es mit all diesen verschiedenen Parametern versucht, als ich " java -jar myjar.jar" über die Befehlszeile aufgerufen habe: " -classpath lib/", " -classpath ./lib/", " -classpath lib", " -cp lib/*", " -cp lib/\*", " -classpath lib/referenced-class.jar", " -classpath ./lib/referenced-class.jar" (in lib befindet sich das referenzierte Glas)

  • Ich habe versucht, das gesamte referenzierte Glas in meinem Glas zu verpacken, in dem sich meine Hauptklasse befindet ...

  • Und mit all dem habe ich auch versucht, die Klassen in der Manifest-Datei mit: anzugeben, Class-path referenced-jar.jarund ich habe es auch versuchtClass-path lib/referenced-jar.jar

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle

Antworten:

117

Sie können es ohne das -jarBefehlszeilenargument ausführen, wenn Sie den Namen der Hauptklasse kennen, die Sie ausführen möchten:

java -classpath .;myjar.jar;lib/referenced-class.jar my.package.MainClass

Wenn Sie möglicherweise Linux verwenden, sollten Sie ":" anstelle von ";" im Klassenpfad.

Adam Paynter
quelle
Ich habe für immer gesucht, um das herauszufinden!
Chotchki
9
Um klar zu sein, muss das Glas explizit im Klassenpfad sein. Die Angabe eines / lib-Verzeichnisses ist ineffizient.
cmcginty
12
Vielen Dank, mein erstes Scala "Hallo Welt" -Glas lebt ;-) Für die Aufzeichnung - unter Unix verwenden Sie ":" anstelle von ";", und bei mehr Lib-Gläsern fügen Sie einfach weitere Glasdateinamen getrennt hinzu mit ";" / ":"
greenoldman
ICH DANKE DIR SEHR. Ja wirklich.
Andrei Rînea
2
"Wenn Sie zufällig den Namen der Hauptklasse kennen". Sie können leicht herausfinden mitunzip -p the_jar.jar META-INF/MANIFEST.MF | grep Main-Class
Kuba
59

Wenn Sie eine JAR-Datei mit ausführen java -jar, wird das -classpathArgument ignoriert . Sie müssen den Klassenpfad in der Manifestdatei Ihres JARs wie folgt festlegen:

Class-Path: jar1-name jar2-name directory-name/jar3-name

Weitere Informationen finden Sie in den Java-Tutorials: Hinzufügen von Klassen zum Klassenpfad der JAR-Datei .

Bearbeiten: Ich sehe, Sie haben bereits versucht, den Klassenpfad im Manifest festzulegen, aber sind Sie sicher, dass Sie die richtige Syntax verwendet haben? Wenn Sie das ' :' nach " Class-Path" überspringen, wie Sie gezeigt haben, würde es nicht funktionieren.

Michael Myers
quelle
Ja, ich habe es auch mit dem ":" versucht. Ich weiß nicht, warum die Verwendung des Manifests zur Angabe derjenigen, die überhaupt nicht funktioniert haben. Ich fragte die Kollegen und überprüfte alles mit ihnen.
Am neugierigsten. Ich habe es jahrelang so gemacht und hatte nie ein Problem. Haben Sie Class-Path richtig groß geschrieben? Ich weiß nicht, ob es einen Unterschied machen würde ...
Michael Myers
1
Ich denke, das ist die beste Antwort. Das Erstellen einer Manifest-Datei manuell genau richtig ist oft eine schwierige Aufgabe. Normalerweise packe ich das Glas aus und lasse Ant ein anderes machen. Es ist möglich, dass seine Pfad- und Ressourcennamen länger als 72 Zeichen sind, was zu Problemen führt, wenn sie nicht ordnungsgemäß verpackt werden.
Daniel Nesbitt
Ich würde diese Linie nicht durchgehen, wenn Sie es mit Gläsern von Drittanbietern zu tun haben, die Sie verwenden möchten. Gehen Sie stattdessen für Adams Antwort
Stefan Haberl
Dies sollte die akzeptierte Antwort sein. Ich frage mich, ob es möglich ist, alle Gläser aus dem Verzeichnis hinzuzufügen. Verwenden dir/*und dir/*.jarhat nicht funktioniert.
Markos
13

Versuchen

java -cp "your_jar.jar:lib/referenced_jar.jar" com.your.main.Main

Wenn Sie unter Windows arbeiten, sollten Sie ;anstelle von verwenden:

artemb
quelle
3

Sie können versuchen, in Eclipse als "Runnable jar" zu exportieren. Ich habe auch Probleme, wenn ich als "jar" exportiere, aber ich habe nie Probleme, wenn ich als "Runnable jar" exportiere.

Cupakob
quelle
Ich sehe keine "Runnable jar" -Option in den Exportfenstern, nur eine JAR-Datei :(
Welche Version von Eclipse verwenden Sie? Ich habe es im Ganymed .... screrenshot hier: bufka.ath.cx/dslr/Eclipse-Export.png Aber ich weiß nicht, ob das Standardeinstellungen sind oder nicht.
Cupakob