java - 无法让 Eclipse 使用位于 mac os x 上 $PATH 上的 ProcessBuilder 识别二进制文件

标签 java eclipse macos eclipse-classpath

我刚刚切换到在 Mac 上工作,我正在尝试确定为什么我无法获取 Eclipse为了识别我试图通过 ProcessBuilder 运行的二进制文件.

我尝试将其作为 Java Application 运行在Eclipse并作为 TestNG测试。

如果我用 java 编译该类直接从命令行运行它,它可以工作,但不能通过 Eclipse,这让我相信 $PATH 的配置我的 TestNG 中设置不正确配置。

问题

我确信这是 Eclipse 中的配置问题,但经过一天的搜索并没有找到答案后,我想发帖寻求一些帮助。我尝试设置 $PATH在配置上,但它似乎不起作用。

谢谢

更新/回答

事实证明PATH我在如下所示的外壳上设置的与 Java 不一样我使用下面的代码检查过。验证后,我在 ProcessBuilder 上添加了到我的环境的正确路径并执行了脚本,如答案所示。

Map<String, String> env = processBuilder.environment();
        for (String key : env.keySet())
             System.out.println(key + ": " + env.get(key));

        Map<String, String> envs = processBuilder.environment();
        System.out.println("Path " + envs.get("PATH"));
        envs.put("PATH", "/usr/local/bin");
        System.out.println("PATH " + envs.get("PATH"));

代码

        File logsDir = new File(logDirectory);
        if (!logsDir.exists()) {
            logsDir.mkdirs();
        }

        // run process directly
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("appium");

        processBuilder.redirectError(new File(logsDir, "appiumError.txt"));
        processBuilder.redirectOutput(new File(logsDir, "appiumOutput.txt"));

        process = processBuilder.start();

输出(找不到 node 来运行 appium,因此找到 No such file or directory )

Caused by: java.io.IOException: Cannot run program "appium": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at AppiumService.startAppium(AppiumService.java:77)

路径(nodeappium的bin位于/usr/local/bin中)

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:
/usr/local/opt/ant/bin:/usr/local/opt/maven/bin:
/usr/local/opt/gradle/bin

最佳答案

java 进程的 PATH 变量可能由 Eclipse 显式设置,不包含您需要的路径。您可以使用相应目录的绝对路径调用该命令,也可以尝试使用 shell 通过创建进程来启动进程

processBuilder.command("/bin/sh", "-c", "appium");

关于java - 无法让 Eclipse 使用位于 mac os x 上 $PATH 上的 ProcessBuilder 识别二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831773/

相关文章:

swift - 如何在 OS X 上的文本字段上使用 DidEndEditing (swift)

java - 如何添加 onClickListener 而不是替换监听器?

eclipse - Java Eclipse 在保存时关闭自动构建工作区

objective-c - Xcode 链接器错误 : file too small for architecture x86_64

java - Eclipse 使用正则表达式查找/替换整行

eclipse - GWT 2.4.0 与 Google Web 工具包插件 3.8.0.v201410302155-rev-r42

ruby-on-rails - macOS, rails : "Failed to build gem native extension"

java - 在我们所有商店中按产品类别查找销售明细

java - Java中如何从集合中获取特定对象

java - 为什么德语本地化的 DecimalFormat 在 Java 中成功地将 "3.2"解析为十进制?