OSX上Eclipse中的环境变量

时间:2014-10-14 06:01:34

标签: java eclipse macos path environment

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

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

现在在我的bash shell中,我可以执行svd,因为它指向已安装的文件夹“/ usr / local / bin / svd”。但是我的java程序无法执行“svd”和eclipse返回错误“无法运行程序”svd“:错误= 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");

1 个答案:

答案 0 :(得分:1)

不能运行svd程序而不是jvm的eclipse,因为它无法在系统上找到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");
}