【发布时间】:2011-02-11 16:38:18
【问题描述】:
我想做的是从一个 groovy 脚本调用 maven。有问题的 groovy 脚本用作 maven 包装器,通过下载标签并在下载的内容上调用 maven 来构建 J2EE 项目。我应该如何完成调用 maven 来构建/打包 EAR(groovy 脚本已经能够从 SCM 下载标签)。
【问题讨论】:
标签: command-line groovy build-automation
我想做的是从一个 groovy 脚本调用 maven。有问题的 groovy 脚本用作 maven 包装器,通过下载标签并在下载的内容上调用 maven 来构建 J2EE 项目。我应该如何完成调用 maven 来构建/打包 EAR(groovy 脚本已经能够从 SCM 下载标签)。
【问题讨论】:
标签: command-line groovy build-automation
您可以使用 Runtime 类来启动 shell 命令。看看这里:http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String) 您可以稍后捕获流程执行的结果(以了解它是否失败)。
【讨论】:
在 Groovy 中调用外部进程的最简单方法是对字符串使用 execute() 命令。例如,要从 groovy 脚本执行 maven,请运行以下命令:
"cmd /c mvn".execute()
如果您想捕获命令的输出并将其打印出来,您可以这样做:
print "cmd /c mvn".execute().text
开头的 'cmd /c' 调用 Windows 命令外壳。由于 mvn.bat 是一个批处理脚本,因此您需要它。对于 Unix,您可以调用系统 shell。
【讨论】:
对于 Java 7+ stdio 重定向:
new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
【讨论】:
List 的 args,请确保元素都是 Strings 而不是带有插值变量的 GStrings。也不要忘记redirectError。
就这么简单
"yourCommand".execute();
如果你想在标准输出上获得执行命令的打印输出,你可以这样做
def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);
如果你想存储和处理你可以做的输出
def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream.toString());
更新:
你也可以设置工作目录
File workingDir = file("<path to dir>")
def proc = "yourCommand".execute([], workingDir.absolutePath);
【讨论】: