J'ai compilé un fichier JAR et spécifié la classe principale dans le manifeste (j'ai utilisé la fonction d' exportation Eclipse ). Mes dépendances sont toutes dans un répertoire étiqueté 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 le lib/*
comme chemin de classe.
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 l' NoClassDefFoundError
indication que les bibliothèques ne sont pas trouvées.
J'ai même essayé de refaire le fichier JAR et inclus le lib
répertoire et le contenu, mais toujours pas de dés ...
Comment puis-je exécuter un fichier JAR à partir de la ligne de commande et spécifier le chemin de classe à utiliser?
la source
Réponses:
Lorsque vous spécifiez,
-jar
le-cp
paramètre sera ignoré.De la documentation :
Vous ne pouvez pas non plus "inclure" les fichiers jar nécessaires dans un autre fichier jar (vous devrez extraire leur contenu et placer les fichiers .class dans votre fichier jar)
Vous avez deux options:
lib
répertoire dans le manifeste (vous pouvez y utiliser des chemins relatifs)-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
la source
unzip MyJar.jar lib/*.jar
. Ensuite, comme vous le suggérez, ils peuvent courirjava -cp MyJar.jar:lib/* ...
Exécutez un fichier jar et spécifiez un chemin de classe comme celui-ci:
jar_name.jar
est le nom complet du JAR que vous souhaitez exécuterlibs/*
est un chemin vers vos JAR de dépendancecom.test.App
est le nom complet de la classe du JAR qui a lamain(String[])
méthodeLe fichier jar et le fichier jar dépendant doivent avoir des autorisations d'exécution.
la source
Vous pouvez le faire dans un shell unix:
Vous pouvez le faire dans Windows PowerShell:
la source
Vous pouvez également utiliser le manifeste pour spécifier le chemin de classe et la classe principale si vous le souhaitez, vous n'avez donc pas besoin d'utiliser
-cp
ou de spécifier la classe principale. Dans votre cas, il contiendrait des lignes comme celle-ci:Malheureusement, vous devez épeler chaque jar dans le manifeste (ce n'est pas un gros problème comme vous ne le faites qu'une seule fois, et vous pouvez utiliser un script pour créer le fichier ou utiliser un outil de construction comme ANT ou Maven ou Gradle). Et la référence doit être un répertoire relatif ou absolu dans lequel vous exécutez le fichier
java -jar MyJar.jar
.Puis exécutez-le avec
la source
Vous pouvez faire une Runtime.getRuntime.exec (commande) pour relancer le fichier jar, y compris le chemin de classe avec args.
la source