Ce que je veux faire est d'appeler 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 en invoquant maven pour construire/empaqueter le fichier EAR (le script groovy est déjà capable de télécharger le tag depuis SCM).Comment faire des appels de commande système dans Java/Groovy?
Répondre
La méthode la plus simple pour appeler un processus externe dans Groovy consiste à utiliser la commande execute() sur une chaîne. Par exemple, pour exécuter Maven à partir d'un script groovy exécuté ceci:
"cmd /c mvn".execute()
Si vous voulez 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 le shell de commande Windows. Puisque mvn.bat est un script batch, vous en avez besoin. Pour Unix, vous pouvez appeler le shell système.
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 capturer plus tard les résultats de l'exécution du processus (pour savoir si elle a échoué ou non).
Pour la redirection de Java 7+:
new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
Si vous passez une 'List' d'args, assurez-vous que les éléments sont tous' String's et non [GString] (http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html) s avec des variables interpolées. N'oublie pas non plus de redirectError. – seanf
Il est aussi simple que de faire
"yourCommand".execute();
Si vous souhaitez obtenir des sorties d'impression sur la commande exécutée sur la sortie standard que vous pouvez 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());
lorsque je fais ceci def homeDir = "c:/test/server"; def workDir = "$ {homeDir}/workDir"; def tempDir = "$ {workDir}/tmp"; println (homeDir); println (workDir); RunShell ("cd c:") ; // runShell ("mkdir -p $ {tempDir}"); void runShell (Chaînes) { def execute = s.execute(); execute.waitForProcessOutput (System.out, System.err); def valeur = execute.exitValue(); if (val> 0) { throw nouvelle Exception ("Valeur de sortie: $ {value}"); } } Je reçois une erreur comme ci-dessous java.io.IOException: Impossible d'exécuter le programme "cd": Erreur CreateProcess = 2, Le système ne peut pas trouver le fichier spécifié – user641887
Cool! Je ne savais pas que vous pouvez le faire. – armandino
Cela a fonctionné la première fois pour moi. Je suis descendu le processus "consumeProcessOutput()" route pendant un moment, mais n'avait pas de dés avec cela. Cela aidera grandement à déterminer les raisons de l'échec de la construction de Docker. – eversMcc