107 votes

Maven : Comment exécuter un fichier .java à partir de la ligne de commande en passant des arguments ?

J'ai le problème suivant. Je voudrais exécuter mvn à partir de la ligne de commande pour un Main.java fichier. Main.java accepte un paramètre. Comment puis-je le faire à partir de la ligne de commande ?

J'ai essayé de trouver un exemple mais je n'ai pas réussi. Quelqu'un pourrait-il m'aider en me donnant un exemple ?

J'ai regardé aquí mais je ne comprenais pas bien ce que je devais faire.

Aussi, comment exécuter cette commande à partir d'un autre dossier que le dossier Main.java ?

par exemple le Main.java est situé à my/java/program/Main.java . Que dois-je mettre dans

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"

4 votes

Qu'est-ce que vous n'avez pas compris dans le tutoriel en question ? C'est assez simple. Veuillez ajouter à votre question, le code que vous avez essayé jusqu'à présent.

0 votes

En fait, ce que j'essaie de faire, c'est d'appeler une classe java à partir d'une autre classe java. Normalement, j'exécute cette classe depuis Eclipse. J'utilise Runtime.getRuntime().exec("") ; pour exécuter cette classe depuis un autre programme java. Mais Main.class a besoin de mvn pour s'exécuter. (J'ai édité la question)

177voto

Behe Points 1435

Tu pourrais courir : mvn exec:exec -Dexec.args="arg1" .

Ceci passera l'argument arg1 à votre programme.

Vous devez spécifier la classe principale entièrement qualifiée, par exemple, une classe Main.java qui se trouve dans un paquetage de test devrait avoir les caractéristiques suivantes

mvn exec:java  -Dexec.mainClass=test.Main

En utilisant le -f tel que décrit aquí vous pouvez également l'exécuter à partir d'autres répertoires.

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm

Pour les arguments multiples, il suffit de les séparer par un espace comme vous le feriez sur la ligne de commande.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"

Pour les arguments séparés par un space vous pouvez regrouper en utilisant 'argument separated with space' à l'intérieur des guillemets.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"

1 votes

Oui, mais comment sait-il où se trouve le fichier main.java ?

0 votes

Et si je n'ai pas le pom.xml. J'obtiens l'erreur suivante Cannot execute mojo : java. Il faut un projet avec un pom.xml existant, mais la compilation n'en utilise pas.

0 votes

Un projet maven nécessite un pom.xml, sans ce fichier, l'utilisation de maven n'a guère de sens. Donc, peut-être que vous voulez d'abord créer un projet maven ? Ensuite, toutes les autres solutions devraient fonctionner parfaitement.

12voto

Tommy1005 Points 71

Ajout d'un shell script par ex. run.sh rend les choses beaucoup plus faciles :

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"

Ensuite, vous êtes en mesure d'exécuter :

./run.sh arg1 arg2 arg3

9voto

Benedikt Köppel Points 710

En plus de l'exécuter avec mvn exec:java vous pouvez également l'exécuter avec mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"

-1voto

Guillaume Polet Points 31933

Jetez un coup d'œil à la maven-exec-plugin . Utilisé correctement, vous pouvez lui faire compiler votre classe java et ensuite simplement exécuter java avec la classe compilée sur le classpath. Pour le lancer, il suffit d'utiliser

mvn exec:exec

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