Java ProcessBuilder:环境设置正确,但仍然找不到命令

Java ProcessBuilder:环境设置正确,但仍然找不到命令,java,path,environment-variables,processbuilder,Java,Path,Environment Variables,Processbuilder,我在开发Eclipse插件时遇到了Java的ProcessBuilder问题。 在调用start()方法之前,我正确地设置了环境,但是当我运行程序时,它总是返回一个command not found错误 当我通过命令行调用命令时,它工作得非常好 当我根据需要使用环境启动eclipse时,找到了命令,程序运行正常 只有当我以编程方式设置环境时,程序才会失败 以下是我所拥有的: ProcessBuilder pb = new ProcessBuilder("my_command", file, ou

我在开发Eclipse插件时遇到了Java的ProcessBuilder问题。 在调用start()方法之前,我正确地设置了环境,但是当我运行程序时,它总是返回一个command not found错误

当我通过命令行调用命令时,它工作得非常好

当我根据需要使用环境启动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();
...
ProcessBuilder pb=newprocessbuilder(“我的命令”、文件、输出);
Map env=pb.environment();
env.put(“路径”,env.get(“路径”)+File.pathSeparator+env1+File.pathSeparator+env2);
进程p=pb.start();
...
其中,
env1
env2
是我要添加到PATH变量的路径

这个代码有什么问题


提前谢谢你

我认为,您在ProcessBuilder上设置的环境只是传递给新流程的内容,而不是生成器本身使用的内容。在尝试启动新进程之前,请尝试设置Java进程的名称

编辑:

鉴于不可能改变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);

但是,如果
“我的命令”
可能已经在用户的
路径
元素中,则可能不实用。

谢谢您的回复。但我认为这在五月的情况下是不可能的,因为我想要添加到环境路径的路径可能是由用户在运行时添加的。。。在任何情况下,如果我理解的话,都不能在运行时修改System.getenv()。我弄错了吗?直到现在我才在你的回复中看到这个更新。事实上,在理解ProcessBuilder的实际工作原理后,我自己得出了相同的结论(我必须说,这是基于您的第一个答案)。因此,我们在调用
start()
之前设置的环境被传递给要启动的进程中执行的命令,而不是由当前在JVM上运行的进程(负责在要启动的进程中查找命令)使用。