Quelle est la différence entre exécuter une application Java avec java -cp CLASSPATH
et java -jar JAR_FILE_PATH
? L'un d'entre eux est-il préféré à l'autre pour exécuter une application Java? Je veux dire, lequel de ces moyens est le plus cher pour JVM (en fonction de l'utilisation des ressources de leur machine)?
Lequel entraînera JVM pour générer plus de threads tout en essayant d'exécuter l'application?
Avec l'
-cp
argument, vous indiquez le chemin de classe, c'est-à-dire le (s) chemin (s) vers des classes ou bibliothèques supplémentaires dont votre programme peut avoir besoin lors de sa compilation ou de son exécution. Avec-jar
vous spécifiez le fichier JAR exécutable que vous souhaitez exécuter.Vous ne pouvez pas les spécifier tous les deux. Si vous essayez de courir,
java -cp folder/myexternallibrary.jar -jar myprogram.jar
cela ne fonctionnera pas vraiment. Le chemin d'accès aux classes de ce JAR doit être spécifié dans son manifeste, et non en tant-cp
qu'argument.Vous pouvez en savoir plus ici et ici .
PS:
-cp
et-classpath
sont des synonymes.la source
-cp
et-classpath
, alors non, il n'y a pas de différence.-jar
vous spécifiez quel JAR exécutable vous voulez exécuter. Avec-cp
vous spécifiez le (s) chemin (s) vers les classes / bibliothèques supplémentaires dont votre programme peut avoir besoin. Les 2 ont des objectifs très différents.java -jar PATH -cp PATH2
Lors de l'utilisation,
java -cp
vous devez fournir un nom de classe principal complet, par exemplejava -cp com.mycompany.MyMain
Lorsque
java -jar myjar.jar
vous utilisez votre fichier jar, vous devez fournir les informations sur la classe principale via manifest.mf contenues dans le fichier jar dans le dossierMETA-INF
:Main-Class: com.mycompany.MyMain
la source
java -cp CLASSPATH est nécessaire si vous souhaitez spécifier tout le code dans le chemin de classe. Ceci est utile pour le débogage du code.
Le format exécutable jarred:
java -jar JarFile
peut être utilisé si vous souhaitez démarrer l'application avec une seule commande courte. Vous pouvez spécifier des fichiers jar dépendants supplémentaires dans votre MANIFEST en utilisant des fichiers jar séparés par des espaces dans une entrée Class-Path, par exemple:Les deux sont comparables en termes de performances.
la source
Comme déjà dit, le -cp est juste pour dire au jvm dans la ligne de commande quelle classe utiliser pour le thread principal et où il peut trouver les bibliothèques (définir le chemin de classe). Dans -jar, il s'attend à ce que le chemin de classe et la classe principale soient définis dans le manifeste du fichier jar. L'autre consiste donc à définir les choses en ligne de commande tandis que les autres les trouvent dans le manifeste jar. Il n'y a aucune différence de performance. Vous ne pouvez pas les utiliser en même temps, -jar remplacera le -cp.
Même si vous utilisez -cp, il vérifiera toujours le fichier manifeste. Vous pouvez donc définir certains des chemins de classe dans le manifeste et d'autres dans la ligne de commande. Ceci est particulièrement utile lorsque vous avez une dépendance sur un fichier jar tiers, que vous pourriez ne pas fournir avec votre build ou ne pas vouloir fournir (en espérant qu'il se trouve déjà dans le système où il doit être installé par exemple). Vous pouvez donc l'utiliser pour fournir des pots externes. Son emplacement peut varier entre les systèmes ou il peut même avoir une version différente sur un système différent (mais ayant les mêmes interfaces). De cette façon, vous pouvez créer l'application avec une autre version et ajouter la dépendance tierce réelle au chemin de classe sur la ligne de commande lors de son exécution sur différents systèmes.
la source
Il n'y aura aucune différence en termes de performances. En utilisant java - cp, nous pouvons spécifier les classes et les jar requis dans le chemin de classe pour exécuter un fichier de classe java.
S'il s'agit d'un fichier jar exécutable. Lorsque la commande java -jar est utilisée, jvm trouve la classe dont il a besoin pour s'exécuter à partir du fichier /META-INF/MANIFEST.MF dans le fichier jar.
la source