我在开发的Eclipse插件上使用Java的ProcessBuilder遇到麻烦。我在调用start()方法之前正确设置了环境,但是当我运行程序时,它总是返回命令未找到错误。
当我通过命令行调用命令时,它可以完美运行。
当我根据需要使用环境启动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变量的路径…
env1
env2
该代码有什么问题?
先感谢您!
我认为,您在ProcessBuilder上设置的环境只是传递给新流程的内容,而不是构建器本身使用的环境。在尝试启动新进程之前,请尝试设置Java进程的环境变量。
编辑:
鉴于可能无法更改Java进程的环境,我相信您必须提出一些解决方法。
当您已经知道要寻找的路径时,您当然可以找出自己的完整路径"my_command",大约是:
"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元素之一中,则可能是不切实际的。
PATH