1

我需要从 java 进程调用外部进程/脚本/cli 命令。
由于这些调用会很多,有些会返回运行的进程/脚本的结果,而其他人只会运行它,我想知道是否:

  1. 有一个围绕 Java 构建的标准设计,ProcessBuilder 这样我就不会分散在代码调用ProcessBuilder
  2. 我可以做哪些优化?例如,从文件中读取所有 cli 命令而不是像 final String在代码中那样保留它们是否有意义?
4

1 回答 1

2

你的问题有点模糊,无法写出准确的答案,但我有一些建议:

  • Shell 旨在链接命令(管道、等待等)并编写一些逻辑代码。Shell 被解释并且很容易更新,但必须保持简单。它们可能是您系统的基本组成部分。
  • 编写自己的launch方法来启动进程并捕获 stdout 和 stderr(在两个线程中),以编写驱动程序的日志。
  • 设计一个 XML 文件以声明方式指定:
    • 进程路径,它们的参数(静态参数)
    • 作业之间的并行性和同步性
  • 用Java写一个模型来反映XML流程模型(JAXB可能是一个解决方案)
  • 为模型添加等待一组作业的能力
  • 向模型添加修饰符以动态更改参数的值

如果我尝试对您的问题进行分类,我认为主要是在Control flow

要解决一个大问题,您可以使用并行性:同时启动多个进程并等待所有进程终止:这是一个集合连接阶段。也许您可以向另一台联网的计算机启动远程命令。

如何在 XML 文件中指定并行性的一个很好的例子是ANT 构建文件

<parallel>
  <wlrun ... >
  <sequential>
    <sleep seconds="30"/>
    <junit fork="true" forkmode="once" ... >
    <wlstop/>
  </sequential>
</parallel>

我可以建议您在不编程的情况下使用 ANT 来解决您的问题吗?

用纸和笔画一幅希望执行的图可能会有所帮助...... ;-)

几个图形应用程序可能有助于绘制控制流的逻辑图。完成后,在此处发布,您将获得更准确的答案,我希望...

于 2013-03-06T21:24:48.020 回答