当前位置: 首页 > 面试题库 >

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

翁翰
2023-03-14
问题内容

我在开发的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变量的路径…

该代码有什么问题?

先感谢您!


问题答案:

我认为,您在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);

但是,如果"my_command"可能已经在用户PATH元素之一中,则可能是不切实际的。



 类似资料:
  • 我有一个预请求脚本,它在每次生成请求时递增一个环境变量以生成不同的ID。此外,我有一个运行程序多次调用此请求: 但是,我注意到在运行期间,环境变量不会更新,至少在环境选项卡中是这样: 但我监控控制台日志中的变量,它正确递增: 我的问题是,如果我在所有请求结束之前过早停止运行程序,环境变量不会注册所有已执行的集合,因此它会保留执行开始时的值。这可能是一个已知的问题,也可能只是我以错误的方式使用工具,

  • 当我跑步时 $ionic cordova构建android 构建失败,出现此错误: Cordova build android找不到ANDROID_HOME环境变量。尝试设置它 尽管当我跑步时: 科尔多瓦要求 我得到以下结果: android的需求检查结果: Java JDK:已安装1.8.0 Android SDK:安装正确 Android目标:安装android-29、android-28、a

  • 我这样设置android home环境变量 导出Android_HOME=/HOME/Associate/Android/sdk导出路径=${PATH}:$Android_HOME/tools:$Android_HOME/platform-tools Java JDK:安装1.8.0 Android SDK:安装了真正的Android目标:安装了android-29、android-28、andr

  • 我的笔记本电脑上安装了Java14和Java8,但默认情况下我想使用8,所以我尝试将我的java_HOME设置为使用-V1.8。 在~/。bash_profile我添加了一行。执行此操作后,立即返回正确的路径,返回正确的版本。然而,如果我关闭终端并再次打开它,将产生一个空行,显示JAVA 14。编辑之后。bash_profile我做的当我重新打开终端并执行行设置JAVA_HOME仍然存在。为什么我

  • 问题内容: 当我跑步时,我得到警告: 全局初始化失败:BadValue无效或未设置用户区域设置。请确保正确设置LANG和/或LC_ *环境变量。 问题答案: 生成语言环境 缺少的语言环境是使用locale-gen生成的: 或者,可以使用localedef:[1]手动创建区域设置文件。 设置区域设置 可以如下设置区域设置(在示例中为): 该命令将在Debian下打开一个对话框,用于选择所需的语言环境

  • 问题内容: 我在运行show时有一个file.sh:未设置TERM环境变量。 问题答案: 您可以看到它是否真的没有 设置 。运行命令。 如果没有,则可以这样设置: