web-dev-qa-db-de.com

füge external jar hinzu, wenn Java -jar

Aus meinen Lesungen, wenn Sie einen Befehl wie folgt ausführen:

Java -jar foo.jar

Dann wird der Hauptklassenpfad ignoriert und der Klassenpfad wird aus der Manifestdatei übernommen.

Außerdem wird der in der Befehlszeile deklarierte Klassenpfad ignoriert. Also in:

Java -classpath /usr/local/jar/foobar.jar -jar foo.jar

/usr/local/jar/foobar.jar wird ignoriert.

Zuletzt habe ich gelesen, dass die Manifestdatei nur relative Pfade innerhalb der JAR-Datei enthalten kann.

Wie können Sie absolute Pfade zu externen JAR-Dateien einfügen, die auf dem System vorhanden sind, aber nicht in der ausgeführten JAR-Datei enthalten sind?

38
rouble

Gibt es einen Grund, warum Sie vermeiden, die Hauptklasse wie aufzurufen

Java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname

?

Mit dieser Art des Aufrufs können Sie absolute Pfade mit relativen Pfaden mischen. Fügen Sie dies in ein Shell-Skript oder eine Batch-Datei ein, um zu vermeiden, dass Sie den vollständigen Klassenpfad eingeben oder speichern müssen, um die Dinge zu vereinfachen.

40
matt b

Sie können einen Ordner, beispielsweise lib, in dem Ordner erstellen, in dem sich die JAR-Datei befindet.

Manifest.MF-Inhalte können sein:

Main-Class: com.mastergaurav.test.app.MainClass
Class-Path: lib/one.jar lib/two.jar

Ordnerinhalt:

mainFolder/
   * lib/one.jar
   * lib/two.jar
   * my-main.jar

Ausführen:

Java -jar my-main.jar
39
Gaurav Vaish