Ich habe eine JAR- Datei kompiliert und die Hauptklasse im Manifest angegeben (ich habe die Eclipse- Exportfunktion verwendet). Meine Abhängigkeiten befinden sich alle in einem Verzeichnis mit der Bezeichnung lib
. Ich kann anscheinend keine eindeutige Antwort darauf erhalten, wie meine JAR-Datei ausgeführt wird, während angegeben wird, dass die lib/*
als Klassenpfad verwendet werden soll.
Ich habe es versucht:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
etc...
Jeder gibt einen Fehler aus und sagt:
Error: Could not find or load main class ....
oder gibt an, NoClassDefFoundError
dass die Bibliotheken nicht gefunden werden.
Ich habe sogar versucht, die JAR-Datei neu zu erstellen und das lib
Verzeichnis und den Inhalt eingefügt , aber immer noch keine Würfel ...
Wie kann ich eine JAR-Datei über die Befehlszeile ausführen und den zu verwendenden Klassenpfad angeben?
quelle
Antworten:
Wenn Sie angeben,
-jar
wird der-cp
Parameter ignoriert.Aus der Dokumentation :
Sie können benötigte JAR-Dateien auch nicht in eine andere JAR-Datei "einschließen" (Sie müssten deren Inhalt extrahieren und die .class-Dateien in Ihre JAR-Datei einfügen).
Sie haben zwei Möglichkeiten:
lib
Verzeichnis in das Manifest ein (Sie können dort relative Pfade verwenden).-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
quelle
unzip MyJar.jar lib/*.jar
. Dann, wie Sie vorschlagen, können sie laufenjava -cp MyJar.jar:lib/* ...
Führen Sie eine JAR-Datei aus und geben Sie einen Klassenpfad wie folgt an:
jar_name.jar
ist der vollständige Name der JAR, die Sie ausführen möchtenlibs/*
ist ein Pfad zu Ihren Abhängigkeits-JARscom.test.App
ist der vollständig qualifizierte Name der Klasse aus der JAR, die über diemain(String[])
Methode verfügtDas Glas und das abhängige Glas sollten über Ausführungsberechtigungen verfügen.
quelle
Sie können dies in der Unix-Shell tun:
Sie können dies in Windows Powershell tun:
quelle
Alternativ können Sie das Manifest verwenden, um den Klassenpfad und die Hauptklasse anzugeben, wenn Sie möchten. Sie müssen also
-cp
die Hauptklasse nicht verwenden oder angeben. In Ihrem Fall würde es Zeilen wie diese enthalten:Leider müssen Sie jedes Glas im Manifest buchstabieren (kein Problem, wie Sie es nur einmal tun, und Sie können ein Skript zum Erstellen der Datei oder ein Build-Tool wie ANT oder Maven oder Gradle verwenden). Und die Referenz muss ein relatives oder absolutes Verzeichnis sein, in dem Sie das ausführen
java -jar MyJar.jar
.Dann führen Sie es mit aus
quelle
Sie können einen Befehl Runtime.getRuntime.exec (Befehl) ausführen, um das JAR einschließlich des Klassenpfads mit Argumenten neu zu starten.
quelle