【问题标题】:Environment variables in Eclipse on OSXOSX 上 Eclipse 中的环境变量
【发布时间】:2014-12-08 19:46:12
【问题描述】:

我已经导入了一个执行以下命令的库

Runtime.getRuntime().exec("svd");

现在在我的 bash shell 中,我可以执行 svd,因为它指向已安装的文件夹“/usr/local/bin/svd”。但是我的 java 程序无法执行“svd”并且 eclipse 返回错误“无法运行程序“svd”:error=2,没有这样的文件或目录”

我在 Eclipse 的运行配置中将以下内容添加到我的环境变量中。

$PATH = /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin/svd
svd = /usr/local/bin/svd

但是 eclipse 仍然说它无法运行程序“svd”。除了手动编写完整路径之外,还有什么方法可以解决这个问题?

e.g Runtime.getRuntime().exec("/usr/local/bin/svd");

【问题讨论】:

  • 尝试将调用包装在对 BASH 的调用中?
  • 旁注:ProcessBuilder 是比 Runtime 更好的启动子进程的方法。
  • 是的,我可以做到。但是正如您所看到的,该库可以在所有平台上运行,因此我希望我可以手动设置 eclipse 上的路径,而无需修改库的源代码

标签: java eclipse macos path environment


【解决方案1】:

不是eclipse不能运行svd程序而是jvm,因为它在系统上找不到svd's路径。

你应该把你的 svd 程序放在 $PATH 变量上,这样当 JVM 运行你的程序并找到对 svd 的调用时,它应该知道这个 svd 程序的位置,以便它可以调用它。

有关如何在 OSX 上配置 $PATH 变量,请查看此处:Setting environment variables in OS X?

我还注意到您使用Runtime 在您的 java 程序中运行外部程序。这是在 java 中运行外部程序的一种古老方式。您应该考虑改用ProcessBuilder。它更加灵活,被认为是现在运行外部程序的最佳选择:

ProcessBuilder pb = new ProcessBuilder("svd");
Process p = pb.start();
//You could also read the error stream, so that when svd is not correctly set on the running system, you may alert the user.
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    sb.append(line);
}

int retCode = p.waitFor();
if(retCode == 2){
    //alert the user that svd is not correctly set on PATH variable.
    LOGGER.error(sb);
    System.out.println("ERROR!! Could not run svd  because it's not correctly set on PATH variable");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多