What I want to do is invoke maven from a groovy script. The groovy script in question is used as a maven wrapper to build J2EE projects by downloading a tag and invoking maven on what was downloaded. How should I accomplish invoking maven to build/package the EAR (the groovy script is already capable of downloading the tag from SCM).
The simplest way to invoke an external process in Groovy is to use the execute() command on a string. For example, to execute maven from a groovy script run this:
"cmd /c mvn".execute()
If you want to capture the output of the command and maybe print it out, you can do this:
print "cmd /c mvn".execute().text
The 'cmd /c' at the start invokes the Windows command shell. Since mvn.bat is a batch script you need this. For Unix you can invoke the system shell.
It is as simple as doing
"yourCommand".execute();
If you want to get print outputs on the executed command on standard output you can do
def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);
If you want to store and process the output you can do
def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream.toString());
UPDATE:
Also you can set working dir by
File workingDir = file("<path to dir>")
def proc = "yourCommand".execute([], workingDir.absolutePath);
For Java 7+ stdio redirection:
new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
You may use Runtime class to launch a shell command. take a look here: http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String) You may later capture the results of the Process execution (to find out if it failed or not).
来源:https://stackoverflow.com/questions/2701547/how-to-make-system-command-calls-in-java-groovy