Exécuter une application Java à partir de la ligne de commande

1. Vue d'ensemble

En règle générale, chaque application significative inclut un ou plusieurs fichiers JAR en tant que dépendances. Cependant, il arrive parfois qu'un fichier JAR représente lui-même une application autonome ou une application Web.

Nous allons nous concentrer sur le scénario d'application autonome dans cet article. Ci-après, nous l'appellerons une application JAR.

Dans ce didacticiel, nous allons d'abord apprendre à créer une application JAR. Plus tard, nous apprendrons à exécuter une application JAR avec ou sans arguments de ligne de commande .

2. Créez une application JAR

Un fichier JAR peut contenir une ou plusieurs classes principales. Chaque classe principale est le point d'entrée d'une application . Donc, en théorie, un fichier JAR peut contenir plusieurs applications, mais il doit contenir au moins une classe principale pour pouvoir s'exécuter.

Un fichier JAR peut avoir un point d'entrée défini dans son fichier manifeste . Dans ce cas, le fichier JAR est un JAR exécutable. La classe principale doit être incluse dans ce fichier JAR.

Tout d'abord, voyons un exemple rapide de la façon de compiler nos classes et de créer un JAR exécutable avec un fichier manifeste:

$ javac com/baeldung/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class

Un JAR non exécutable est simplement un fichier JAR qui n'a pas de classe principale définie dans le fichier manifeste. Comme nous le verrons plus tard, nous pouvons toujours exécuter une classe principale contenue dans le fichier JAR lui-même.

Voici comment créer un JAR non exécutable sans fichier manifeste:

$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

3. Arguments de ligne de commande Java

Comme toute application, une application JAR accepte n'importe quel nombre d'arguments, y compris zéro argument. Tout dépend des besoins de l'application.

Cela permet à l'utilisateur de spécifier les informations de configuration lorsque l'application est lancée .

Par conséquent, l'application peut éviter les valeurs codées en dur et peut toujours gérer de nombreux cas d'utilisation différents.

Un argument peut contenir des caractères alphanumériques, des caractères Unicode et éventuellement des caractères spéciaux autorisés par le shell, par exemple «@».

Les arguments sont séparés par un ou plusieurs espaces . Si un argument doit contenir des espaces, les espaces doivent être placés entre guillemets. Les guillemets simples ou doubles fonctionnent bien.

Généralement, pour une application Java typique, lors de l'appel de l'application, l'utilisateur entre des arguments de ligne de commande après le nom de la classe.

Cependant, ce n'est pas toujours le cas pour les applications JAR.

Comme nous l'avons déjà mentionné, le point d'entrée d'une classe principale Java est la méthode principale. Les arguments sont chaîne s et sont transmises à la méthode principale comme une chaîne matrice.

Cela dit, dans l'application, nous pouvons convertir n'importe quel élément du tableau String en d'autres types de données, tels que char , int , double , leurs classes wrapper ou d'autres types appropriés.

4. Exécutez un fichier JAR exécutable avec des arguments

Voyons la syntaxe de base pour exécuter un fichier JAR exécutable avec des arguments:

java -jar nom-fichier-jar [args…]

L'exécutable JAR créé précédemment est une application simple qui imprime simplement les arguments passés. Nous pouvons l'exécuter avec n'importe quel nombre d'arguments. Voici un exemple avec deux arguments:

$ java -jar JarExample.jar "arg 1" [email protected] 

Nous verrons la sortie suivante dans la console:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected] 

Ainsi, lors de l'appel d'un exécutable JAR, nous n'avons pas besoin de spécifier le nom de la classe principale sur la ligne de commande . Nous ajoutons simplement nos arguments après le nom du fichier JAR. Si nous fournissons un nom de classe après le nom du fichier exécutable JAR, il devient simplement le premier argument de la classe principale réelle.

La plupart du temps, une application JAR est un JAR exécutable. Un JAR exécutable peut avoir au maximum une classe principale définie dans le fichier manifeste.

Par conséquent, d'autres applications dans le même fichier JAR exécutable ne peuvent pas être définies dans le fichier manifeste, mais nous pouvons toujours les exécuter à partir de la ligne de commande, comme nous le ferions pour un JAR non exécutable. Nous verrons exactement comment dans la section suivante.

5. Exécutez un JAR non exécutable avec des arguments

Pour exécuter une application dans un fichier JAR non exécutable, nous devons utiliser l' option -cp au lieu de -jar . Nous utiliserons l' option -cp (abréviation de classpath) pour spécifier le fichier JAR qui contient le fichier de classe que nous voulons exécuter:

java -cp nom-fichier-jar nom-classe-principale [args…]

Comme vous pouvez le voir, dans ce cas, nous devrons inclure le nom de la classe principale dans la ligne de commande, suivi des arguments .

Le JAR non exécutable créé précédemment contient la même application simple. Nous pouvons l'exécuter avec n'importe quel argument (y compris zéro). Voici un exemple avec deux arguments:

$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]

Et, comme nous l'avons vu ci-dessus, nous verrons la sortie suivante:

Hello Baeldung Reader in JarExample! There are 2 argument(s)! Argument(1):arg 1 Argument(2):[email protected]

6. Conclusion

Dans ce didacticiel, nous avons appris deux façons d'exécuter une application JAR sur la ligne de commande avec ou sans arguments.

Nous avons également démontré qu'un argument pouvait contenir des espaces et des caractères spéciaux (lorsque le shell le permet).

Comme toujours, le code des exemples est disponible à l'adresse over sur GitHub.