153 votes

Exécuter un fichier JAR à partir de la ligne de commande et spécifier le classpath

J'ai compilé un JAR et spécifié la Main-Class dans le manifeste (j'ai utilisé l'outil Eclipse Exportation fonction). Mes dépendances se trouvent toutes dans un répertoire intitulé lib . Je n'arrive pas à obtenir une réponse claire sur la façon d'exécuter mon fichier JAR tout en spécifiant qu'il doit utiliser l'interface de l'utilisateur. lib/* comme classpath.

J'ai essayé :

]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main

etc...

Chacun donne une erreur disant :

Error: Could not find or load main class ....

ou donne le NoClassDefFoundError indiquant que les bibliothèques ne sont pas trouvées.

J'ai même essayé de refaire le fichier JAR et d'y inclure le fichier lib et son contenu, mais toujours pas de résultat...

Comment puis-je exécuter un fichier JAR à partir de la ligne de commande et spécifier le classpath à utiliser ?

261voto

a_horse_with_no_name Points 100769

Lorsque vous spécifiez -jar alors le -cp sera ignoré.

De la documentation :

Lorsque vous utilisez cette option, le fichier JAR est la source de toutes les classes utilisateur, et les autres paramètres de chemin d'accès aux classes utilisateur sont ignorés.

Vous ne pouvez pas non plus "inclure" les fichiers jar nécessaires dans un autre fichier jar (vous devriez extraire leur contenu et placer les fichiers .class dans votre fichier jar).

Vous avez deux options :

  1. inclure tous les fichiers jar de la lib dans le manifeste (vous pouvez utiliser des chemins relatifs ici)
  2. Spécifiez tout ( y compris votre jar) en ligne de commande en utilisant -cp :
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

49voto

Sid Points 413

Exécutez un fichier jar et spécifiez un chemin de classe comme ceci :

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar est le nom complet du JAR que vous voulez exécuter

libs/* est un chemin vers vos JARs de dépendance

com.test.App est le nom entièrement qualifié de la classe du JAR qui a l'attribut main(String[]) méthode

Le jar et le jar dépendant doivent avoir des autorisations d'exécution.

16voto

tars Points 151

Vous pouvez les faire dans le shell unix :

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

Vous pouvez les faire dans Windows powershell :

java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main

0voto

Tim de Vries Points 1

Vous pouvez faire un Runtime.getRuntime.exec(command) pour relancer le jar incluant le classpath avec les args.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X