Exécuter la classe dans le fichier Jar

176

Si vous avez un fichier jar appelé myJar.jarsitué dans / myfolder et que vous souhaitez utiliser la classe appelée à myClasspartir de celui-ci, comment procédez-vous à partir de la ligne de commande?

Je pensais que ce serait d'aller dans le répertoire et de dire java -cp myJar.jar.myClassmais cela ne fonctionne pas. Toute aide serait appréciée.

Jim
la source
java -cp myJar.jar myClassfonctionne bien pour moi - avez-vous une période parasite dans votre ligne de commande au lieu d'un espace?
Chris Dodd
1
Que voulez-vous dire quand vous dites que vous voulez «utiliser» cette classe? Y a-t-il une méthode principale que vous souhaitez appeler en particulier?
Marsellus Wallace

Réponses:

256

Utilisez java -cp myjar.jar com.mypackage.myClass.

  1. Si la classe n'est pas dans un package, alors simplement java -cp myjar.jar myClass.

  2. Si vous ne vous trouvez pas dans le répertoire où myJar.jarse trouve, vous pouvez faire:

    1. Sur les plates-formes Unix ou Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. Sous Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Bitmap
la source
10
Juste en y ajoutant - dans le cas où com.mypackage.myClass (dans l'exemple ci-dessus) a des dépendances sur d'autres jars, exécutez-le comme suit: java -cp dependfile1.jar; dependfile2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Un chemin d'échec possible à surveiller au cas où cela ne fonctionnerait pas: assurez-vous que votre chemin complet vers votre classe correspond exactement à ce qui se trouve dans votre fichier jar. Si vous décompressez -l /location-of-jar/myjar.jar, et voyez autre chose que com / mypackage / myClass, c'est votre problème. (Par exemple, si vous voyez bin / com / mypackage / myClass, vous devriez avoir cd'ed dans bin pour créer votre fichier jar; ce que vous avez ne fonctionnera pas.)
Scott C Wilson
utiliser MyClass, pas myClass
Breno Inojosa
En essayant ce qui précède, j'obtiens l'erreur Exception dans le fil "main" java.lang.NoClassDefFoundError: cucumber / api / cli / Main à com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Causé par: java.lang.ClassNotFoundException: cucumber.api.cli.Main sur java.net.URLClassLoader.findClass (source inconnue) sur java.lang.ClassLoader.loadClass (source inconnue) sur sun.misc.Launcher $ AppClassLoader. loadClass (Source inconnue) à java.lang.ClassLoader.loadClass (Source inconnue) ... 1 de plus
Vaibhav_Sharma
24

Tu veux:

java -cp myJar.jar myClass

La documentation donne l'exemple suivant:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
la source
18

Il existe deux types de fichiers JAR disponibles en Java:

  1. Fichier jar exécutable / exécutable qui contient le fichier manifeste. Pour exécuter un jar exécutable, vous pouvez utiliser java -jar fileName.jaroujava -jar -classpath abc.jar fileName.jar

  2. Fichier jar simple qui ne contient pas de fichier manifeste, vous devez donc simplement exécuter votre classe principale en donnant son chemin java -cp ./fileName.jar MainClass

Gaurav Singh
la source
6

En supposant que vous soyez dans le répertoire où se trouve le myJar.jarfichier et qui myClasscontient une public static void main()méthode:

Vous utilisez la ligne de commande suivante:

java -cp ./myJar.jar myClass

Où:

  1. myJar.jarest dans le chemin actuel , notez que ce .n'est pas dans le chemin actuel sur la plupart des systèmes. Un chemin complet est également préféré ici.

  2. myClassest un chemin d' accès complet au package vers la classe, l'exemple suppose qu'il se myClasstrouve dans le package par défaut, ce qui est une mauvaise pratique, s'il se trouve dans un package imbriqué, ce serait le cas com.mycompany.mycode.myClass.


la source
1

C'est la bonne façon d'exécuter un .jar, et quelle que soit la classe qui .jardevrait avoir main()et les paramètres suivants sont les suivants:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
la source