【问题标题】:How to make System command calls in Java/Groovy?如何在 Java/Groovy 中进行系统命令调用?
【发布时间】:2011-02-11 16:38:18
【问题描述】:

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

【问题讨论】:

    标签: command-line groovy build-automation


    【解决方案1】:

    您可以使用 Runtime 类来启动 shell 命令。看看这里:http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String) 您可以稍后捕获流程执行的结果(以了解它是否失败)。

    【讨论】:

      【解决方案2】:

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

      "cmd /c mvn".execute()
      

      如果您想捕获命令的输出并将其打印出来,您可以这样做:

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

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

      【讨论】:

      • 酷!不知道你能做到。
      • 这对我来说是第一次。沿着流程“consumeProcessOutput()”路线走了一段时间,但没有骰子。这将有助于确定 Docker 构建失败的原因。
      【解决方案3】:

      对于 Java 7+ stdio 重定向:

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

      【讨论】:

      • 如果传入 List 的 args,请确保元素都是 Strings 而不是带有插值变量的 GStrings。也不要忘记redirectError
      【解决方案4】:

      就这么简单

      "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);
      

      【讨论】:

      • 当我这样做时 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();执行.waitForProcessOutput(System.out,System.err); def value = execute.exitValue(); if (val > 0) { throw new Exception("Exit value: ${value}");我收到如下错误 java.io.IOException: Cannot run program "cd": CreateProcess error=2, The system cannot find the file specified
      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 2010-10-21
      • 2013-02-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多