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

Ce que je veux faire est d'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 invoquer maven pour construire/empaqueter L'EAR (le script groovy est déjà capable de télécharger la balise à partir de SCM).

22
demandé sur Zombies 2010-04-23 23:48:26

4 réponses

Le moyen le 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 voulez capturer la sortie de la commande et peut-être l'imprimer, vous pouvez faire ceci:

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

Le 'cmd / c' au début appelle le shell de commande Windows. Depuis mvn.bat est un script batch dont vous avez besoin. Pour Unix, vous pouvez appeler le shell système.

34
répondu Chris Dail 2010-04-24 00:09:39

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 faire

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

Si vous voulez stocker et traiter la sortie, vous pouvez faire

def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream .toString());
20
répondu Aniket Thakur 2014-08-13 17:35:33

Pour la redirection Java 7+ stdio:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
4
répondu Jesse Glick 2013-12-10 18:02:13

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 pouvez ensuite capturer les résultats de l'exécution du processus (pour savoir si elle a échoué ou non).

2
répondu Alex Khvatov 2010-04-23 20:15:50