在没有绝对路径的Java中运行命令行程序

时间:2016-07-29 20:46:41

标签: java bash processbuilder

我试图从Java程序运行Ant。这有效:

// Compile project
ProcessBuilder pb =
        new ProcessBuilder("/usr/local/Cellar/ant/1.9.6/libexec/bin/ant", "-f", pathToProject + "build.xml");
Process p = pb.start();
p.waitFor();

但是,这个程序将在我自己以外的机器上使用,所以我宁愿像这样实例化ProcessBuilder:

new ProcessBuilder("ant", "-f", pathToProject + "build.xml");

虽然ant -f build.xml适用于我的Mac终端,但将上述代码放在我的程序中会输出java.io.IOException: Cannot run program "ant": error=2, No such file or directory

如何以编程方式显示Ant所在的ProcessBuilder?该程序将在OS X和可能的Ubuntu上运行。

注意:此问题不是特定于Ant的。我还需要使用ProcessBuilder来调用其他命令行工具。

1 个答案:

答案 0 :(得分:0)

通过使用属性文件对其进行自定义,可以将Ant的绝对路径注入ProcessBuilder。这样,只需在属性文件中提供相应的路径,就可以在多个环境中运行。