web-dev-qa-db-fra.com

Comment faire des appels de commandes système en Java / Groovy?

Ce que je veux faire, c'est invoquer maven à partir d'un script groovy. Le script groovy en question est utilisé comme un wrapper maven pour construire des projets J2EE en téléchargeant une balise et en invoquant maven sur ce qui a été téléchargé. Comment dois-je accomplir l'invocation de maven pour construire/empaqueter l'EAR (le script groovy est déjà capable de télécharger la balise depuis SCM).

30
Zombies

La façon la plus simple d'invoquer un processus externe dans Groovy est d'utiliser la commande execute () sur une chaîne. Par exemple, pour exécuter maven à partir d'un script groovy, exécutez ceci:

"cmd /c mvn".execute()

Si vous souhaitez capturer la sortie de la commande et peut-être l'imprimer, vous pouvez le faire:

print "cmd /c mvn".execute().text

Le "cmd/c" au début appelle la commande Windows Shell. Puisque mvn.bat est un script batch, vous en avez besoin. Pour Unix, vous pouvez appeler le shell système.

40
Chris Dail

C'est aussi simple que de faire

"yourCommand".execute();

Si vous voulez obtenir des sorties d'impression sur la commande exécutée sur la sortie standard, vous pouvez le faire

def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);

Si vous souhaitez stocker et traiter la sortie, vous pouvez le faire

def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream.toString());
23
Aniket Thakur

Pour Java 7+ redirection stdio:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
4
Jesse Glick

Vous pouvez utiliser la classe Runtime pour lancer une commande Shell. jetez un oeil ici: http://Java.Sun.com/javase/6/docs/api/Java/lang/Runtime.html#exec (Java.lang.String) Vous pourrez plus tard capturer les résultats de l'exécution du processus (pour savoir s'il a échoué ou non).

2
Alex Khvatov