我正在开发的Eclipse插件上遇到Java的ProcessBuilder问题。 我在调用start()方法之前正确设置了环境,但是当我运行程序时,它总是返回一个命令not found error。
当我通过命令行调用命令时,它可以正常工作。
当我根据需要使用环境启动eclipse时,会找到命令并且程序运行正常。
只有当我以编程方式设置环境时,程序才会失败。
这就是我所拥有的:
ProcessBuilder pb = new ProcessBuilder("my_command", file, output);
Map<String, String> env = pb.environment();
env.put("PATH", env.get("PATH") + File.pathSeparator + env1 + File.pathSeparator + env2);
Process p = pb.start();
...
其中,env1
和env2
是我想要添加到PATH变量的路径......
此代码有什么问题?
提前谢谢!
答案 0 :(得分:3)
我认为,您在ProcessBuilder上设置的环境只是传递给新流程的环境,而不是构建器本身使用的环境。在尝试启动新进程之前,请尝试设置Java进程的environment variables。
编辑:
看到可能无法改变Java进程的环境,我相信你必须提出一些解决方法。
当你已经知道你正在寻找的路径时,你当然可以找到"my_command"
自己的完整路径,关于这样:
String commandString;
if ( new File(env1 + "/my_command").isFile() ) {
commandString = env1 + "/my_command";
} else
if ( new File(env2 + "/my_command").isFile() ) {
commandString = env2 + "/my_command";
}
ProcessBuilder pb = new ProcessBuilder(commandString, file, output);
如果"my_command"
可能已经存在于用户的PATH
元素中,则可能不切实际。