web-dev-qa-db-fra.com

inclure un pot externe lors de l'exécution Java -jar

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?

38
rouble

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.

40
matt b

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
39
Gaurav Vaish