2010-04-23 5 views
20

Was ich tun möchte, ist Maven aus einem groovigen Skript aufrufen. Das fragliche Groovy-Skript wird als Maven-Wrapper verwendet, um J2EE-Projekte zu erstellen, indem man ein Tag herunterlädt und Maven auf das herunterlädt, was heruntergeladen wurde. Wie soll ich aufrufen, Maven zu öffnen, um das EAR zu erstellen/zu packen (das groovige Skript ist bereits in der Lage, das Tag von SCM herunterzuladen).Wie mache ich Systembefehlsaufrufe in Java/Groovy?

Antwort

31

Die einfachste Methode zum Aufrufen eines externen Prozesses in Groovy ist die Verwendung des Befehls execute() in einer Zeichenfolge. Zum Beispiel Maven von einem groovigen Skript auszuführen dies auszuführen:

"cmd /c mvn".execute() 

Wenn Sie die Ausgabe des Befehls erfassen möchten und es vielleicht ausdrucken, können Sie dies tun:

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

Die ' cmd/c am Start ruft die Windows-Befehlsshell auf. Da mvn.bat ein Batch-Skript ist, benötigen Sie dies. Unter Unix können Sie die Systemshell aufrufen.

+0

Cool! Ich wusste nicht, dass du das kannst. – armandino

+0

Das hat erstmal für mich funktioniert. Ging die Route "consumeProcessOutput()" für eine Weile runter, hatte aber keine Würfel damit. Dies hilft sehr bei der Ermittlung der Gründe für das Fehlschlagen des Docker-Builds. – eversMcc

4

Für Java 7+ stdio Umleitung:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor(); 
+0

Wenn Sie eine "Liste" von Argumenten übergeben, stellen Sie sicher, dass die Elemente alle 'Zeichenketten' sind und nicht [GString] (http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html) s mit interpolierten Variablen. Vergessen Sie auch nicht "redirectError". – seanf

18

Es ist so einfach wie

"yourCommand".execute(); 

tun Wenn Sie Druckausgaben auf dem ausgeführten Befehl auf der Standardausgabe erhalten möchten Sie

tun können
def proc = "yourCommand".execute(); 
proc.waitForProcessOutput(System.out, System.err); 

Wenn Sie die Ausgabe speichern und verarbeiten möchten, können Sie

tun
+1

wenn ich das def homeDir = "c:/test/server"; def workDir = "$ {homeDir}/workDir"; def tempDir = "$ {workDir}/tmp"; println (homeDir); println (Arbeitsverz); runShell ("cd c:"); // runShell ("mkdir -p $ {tempDir}"); void runShell (Zeichenfolge s) { def execute = s.execute(); execute.waitForProcessOutput (System.out, System.err); def Wert = execute.exitValue(); if (val> 0) { neue Exception werfen ("Exit value: $ {value}"); } } Ich bekomme einen Fehler wie unten java.io.IOException: Kann Programm "cd" nicht ausführen: CreateProcess Fehler = 2, Das System kann die angegebene Datei nicht finden – user641887