如何在Java/Groovy中进行系统命令调用?

Zom*_*ies 28 build-automation groovy command-line

我想要做的是从一个groovy脚本调用maven.有问题的groovy脚本用作maven包装器,通过下载标签并在下载的内容上调用maven来构建J2EE项目.我应该如何完成调用maven来构建/打包EAR(groovy脚本已经能够从SCM下载标签).

Chr*_*ail 41

在Groovy中调用外部进程的最简单方法是对字符串使用execute()命令.例如,要从groovy脚本执行maven,请运行以下命令:

"cmd /c mvn".execute()
Run Code Online (Sandbox Code Playgroud)

如果要捕获命令的输出并可能将其打印出来,可以执行以下操作:

print "cmd /c mvn".execute().text
Run Code Online (Sandbox Code Playgroud)

开头的'cmd/c'调用Windows命令shell.由于mvn.bat是批处理脚本,因此您需要这样做.对于Unix,您可以调用系统shell.


Ani*_*kur 26

这很简单

"yourCommand".execute();
Run Code Online (Sandbox Code Playgroud)

如果要在标准输出上执行已执行命令的打印输出,则可以执行此操作

def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);
Run Code Online (Sandbox Code Playgroud)

如果您想存储和处理输出,您可以这样做

def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream.toString());
Run Code Online (Sandbox Code Playgroud)

  • 当我这样做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值= execute.exitValue(); 如果(val> 0){抛出新的Exception(“退出值:$ {value}”); 我收到如下错误:java.io.IOException:无法运行程序“ cd”:CreateProcess error = 2,系统找不到指定的文件 (2认同)

Jes*_*ick 5

对于 Java 7+ stdio 重定向:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
Run Code Online (Sandbox Code Playgroud)