【问题标题】:Runtime.getRuntime().exec() execute two lines?Runtime.getRuntime().exec() 执行两行?
【发布时间】:2012-03-13 09:02:10
【问题描述】:

我需要在Runtime.getRuntime().exec()中运行两行,这两条:

cd %CMS_HOME%
ant deploy

现在可以制作.bat文件了,但是我觉得两行都没用, 一定更容易!有人知道吗?

【问题讨论】:

    标签: java shell runtime.exec


    【解决方案1】:

    调用任务programmatically from Java

    File buildFile = new File("build.xml");
    Project p = new Project();
    p.setUserProperty("ant.file", buildFile.getAbsolutePath());
    p.init();
    ProjectHelper helper = ProjectHelper.getProjectHelper();
    p.addReference("ant.projectHelper", helper);
    helper.parse(p, buildFile);
    p.executeTarget(p.getDefaultTarget());
    

    【讨论】:

      【解决方案2】:

      将其放入.bat 文件中。这不是没用的;这就是 Runtime.exec 的工作方式。

      您应该考虑使用ProcessBuilder 类而不是Runtime.exec()。它是在 JDK 5 中作为 Runtime.exec() 的继承者引入的。

      【讨论】:

      • 我知道 .bat 是运行线路的好方法。但我需要更多 2 行的命令。并且要为每两行创建一个 .bat 文件,这会很混乱。
      • 不,我不同意。为什么“乱”?这样做并继续前进。
      • 好吧,做吧,然后继续。为什么要担心没有根据的事情呢?您的“混乱”担忧毫无根据。
      【解决方案3】:

      您可以使用Runtime.exec(String command, String[] envp, File dir)dir 文件夹中执行ant deploy

      附:使用来自另一个 java 程序的批处理文件执行 ant,这是一个 java 程序,这有点奇怪。您可以将其作为 java 类运行...

      【讨论】:

      • 嗯,这也不适合我。当我在 cmd 中执行此操作时,它可以工作。但是当我在 Runtime.getRuntime().exec() 中执行此操作时,他找不到文件..
      【解决方案4】:

      当您运行外部应用程序时,您必须根据目标操作系统的规则进行操作。

      在您的情况下,您想在 Windows 上运行 2 个命令,所以您必须说:

      cd TheDir && ant

      首先在命令行中尝试。然后让它工作运行这个带有前缀cmd from java:的命令:

      cmd /c cd TheDir && ant

      您也可以使用纯 Java 解决方案。使用ProcessBuilder 而不是Runtime.exec()。 ProcessBuilder 允许您设置工作目录,因此您可以直接运行ant

      最后一点。实际上,您根本不必运行外部进程。 Ant 是 Java 应用程序。您可以直接从您的应用程序运行其main() 方法并指定所有需要的参数。

      【讨论】:

      • 带有 && 的 De 方法在 CMD 中工作,但不适用于运行时。如果你问我有什么奇怪的..
      • 带有cmd 的版本可能应该包含引号:cmd /c "cd TheDir && ant",否则&& 更有可能将整个cmd /c cd TheDir 部分与ant 分隔,而不仅仅是cd TheDir编辑:刚刚测试过,是的,这就是真正发生的事情,所以双引号确实是必要的。
      • 但在 Java 中我不能这样做,因为引号在字符串之外!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多