2010-04-23 15 views
20

Co chcę zrobić, to przywołać mave'a z pysznego skryptu. Ten groovy skrypt jest używany jako opakowanie do tworzenia projektów J2EE przez pobranie znacznika i wywołanie narzędzia na pobranym pliku. W jaki sposób powinienem wykonać wywoływanie programu maven do budowania/pakowania EAR (ten groovy skrypt jest już w stanie pobrać tag z SCM).Jak wykonywać wywołania systemowe w języku Java/Groovy?

Odpowiedz

31

Najprostszym sposobem wywołania procesu zewnętrznego w Groovy jest użycie komendy execute() na łańcuchu. Na przykład, aby wykonać Maven z groovy skryptu uruchomić to:

"cmd /c mvn".execute() 

Jeśli chcesz przechwytywać dane wyjściowe polecenia i może go wydrukować, można to zrobić:

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

The ' cmd/c 'na początku wywołuje powłokę poleceń systemu Windows. Ponieważ mvn.bat jest skryptem wsadowym, potrzebujesz tego. W systemie Unix można wywołać powłokę systemu.

+0

Super! Nie wiedziałem, że możesz to zrobić. – armandino

+0

To zadziałało dla mnie po raz pierwszy. Poszedłem na ścieżkę procesu "consumeProcessOutput()", ale nie miałem z tym żadnej kości. Pomoże to w ustaleniu przyczyn niepowodzenia kompilacji Docker. – eversMcc

4

Java 7+ stdio przekierowanie:

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

Jeśli przekazujesz "listę" argumentów, upewnij się, że wszystkie elementy to 'String's, a nie [GString] (http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html) s ze zmiennymi interpolowanymi. Nie zapomnij również o 'redirectError'. – seanf

18

Jest to tak proste, jak robi

"yourCommand".execute(); 

Jeśli chcesz uzyskać wyjść z tuszem na wykonywanego polecenia na standardowe wyjście można zrobić

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

Jeśli chcesz przechowywać i przetwarzać dane wyjściowe, możesz wykonać

def proc = "yourCommand".execute(); 
def outputStream = new StringBuffer(); 
proc.waitForProcessOutput(outputStream, System.err); 
println(outputStream .toString()); 
+1

kiedy robię to 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 (String s) { def execute = s.execute(); execute.waitForProcessOutput (System.out, System.err); def wartość = execute.exitValue(); if (val> 0) { throw new Exception ("Wartość wyjścia: $ {wartość}"); } } } Występuje błąd poniżej: java.io.IOException: Nie można uruchomić programu "cd": CreateProcess error = 2, System nie może odnaleźć określonego pliku – user641887

Powiązane problemy