Goal: execute a program via a command line from groovy code

Option 1: executing a string

A string can be executed in the standard java way:
def command = """executable arg1 arg2 arg3"""// Create the String
def proc = command.execute()                 // Call *execute* on the string
proc.waitFor()                               // Wait for the command to finish

// Obtain status and output
println "return code: ${ proc.exitValue()}"
println "stderr: ${proc.err.text}"
println "stdout: ${proc.in.text}" // *out* from the external program is *in* for groovy

Gotchas: Take care if you wish to pass a quoted argument that contains white space – it will be split into multiple arguments, e.g.:

"""executable "first with space" second""".execute()

will invoke executable with the following arguments:

In such a case, you may prefer to use one of the array or list of String variations, e.g.:

["executable", "first with space", "second"].execute()

Option 2: using ant builder's exec task

Ant has an exec task and it be accessed from the AntBuilder object

def ant = new AntBuilder()   // create an antbuilder
ant.exec(outputproperty:"cmdOut",
             errorproperty: "cmdErr",
             resultproperty:"cmdExit",
             failonerror: "true",
             executable: '/opt/myExecutable') {
                             arg(line:"""*"first with space"* second""")
             }
println "return code:  ${ant.project.properties.cmdExit}"
println "stderr:         ${ant.project.properties.cmdErr}"
println "stdout:        ${ ant.project.properties.cmdOut}"

The good thing is that you now have all the ant features at your disposal and Ant will not break up quoted args containing whitespace.

See also: Process Management