代码之家  ›  专栏  ›  技术社区  ›  ALM

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

  •  0
  • ALM  · 技术社区  · 8 年前

    我刚刚切换到mac电脑上工作,我正在试图确定为什么我无法获得 Eclipse 要识别我试图通过 ProcessBuilder .

    我试着把它作为 Java Application 在里面 日食 作为一个 TestNG 测验

    如果我用 java 并直接从命令行运行它,它可以工作,但不能通过Eclipse运行,这让我相信 $PATH 在我的中未正确设置 测试NG 配置

    问题

    我确信这是Eclipse中的一个配置问题,但在搜索了一天之后,我想发布一些帮助。我试着 $路径 但它似乎不起作用。

    非常感谢。

    更新/回答

    事实证明 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)
    

    路径 (用于 节点 appium 位于/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
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Lothar    8 年前

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

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