D'après mes lectures, lorsque vous exécutez une commande comme suit:
Java -jar foo.jar
Le chemin de classe principal est ensuite ignoré et le chemin de classe est extrait du fichier manifeste.
En outre, le chemin de classe déclaré sur la ligne de commande est également ignoré. Donc dans:
Java -classpath /usr/local/jar/foobar.jar -jar foo.jar
/usr/local/jar/foobar.jar est ignoré.
Enfin, j'ai lu que le fichier manifeste ne peut contenir que des chemins relatifs, dans le fichier jar.
Alors, comment pouvez-vous inclure des chemins absolus vers des fichiers JAR externes, qui sont présents sur le système, mais pas dans le fichier JAR en cours d'exécution?
Y a-t-il une raison pour laquelle vous évitez d'invoquer la classe principale comme
Java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname
?
Ce type d'invocation vous permet de mélanger des chemins absolus avec des chemins relatifs. Mettez-le dans un script Shell ou un fichier batch pour éviter d'avoir à taper ou à mémoriser le chemin de classe complet pour simplifier les choses.
Vous pouvez créer un dossier, disons lib, dans le dossier où vous avez le fichier jar.
Le contenu de Manifest.MF peut être:
Main-Class: com.mastergaurav.test.app.MainClass
Class-Path: lib/one.jar lib/two.jar
Contenu du dossier:
mainFolder/
* lib/one.jar
* lib/two.jar
* my-main.jar
Éxécuter:
Java -jar my-main.jar