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?
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.
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