Java,引起:java.io.IOException:错误= 2,没有这样的文件或目录

map*_*008 11 java command

java.io.IOException: Cannot run program "yarn": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at java.lang.Runtime.exec(Runtime.java:620)
    at java.lang.Runtime.exec(Runtime.java:450)
    at java.lang.Runtime.exec(Runtime.java:347)
    at com.Main.main(Main.java:32)
Run Code Online (Sandbox Code Playgroud)

你好,我在使用 Java 执行命令时遇到了一个奇怪的问题。我使用以下代码来运行命令,如果我运行mkdir testFolder,则程序运行成功,但如果我更改命令,yarn -v 则会发生错误。

try {
    Process process = Runtime.getRuntime().exec("yarn -v");//, null, new File("/Users/macos/Desktop/TestProj/"));
} catch (IOException ex) {
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

P/s: 在调试模式下:IntelliJ 可以运行上面的代码,但 Netbeans 失败。

在生产模式下(jar 文件):IntelliJ 也失败了。

编辑2:

  MACs-MacBook-Pro:~ macos$ which pwd
    /bin/pwd
    MACs-MacBook-Pro:~ macos$ which mkdir
    /bin/mkdir
    MACs-MacBook-Pro:~ macos$ which java
    /usr/bin/java
    MACs-MacBook-Pro:~ macos$ which yarn
    /usr/local/bin/yarn
Run Code Online (Sandbox Code Playgroud)

/bin我发现如果我运行or中的命令/usr/bin,代码运行正常(pwd,mkdir,java -version ...),但是yarn在 中/usr/local/bin/,所以它不起作用,我仍然不知道如何修理。

map*_*008 12

我终于找到了答案,因为我启动的进程与终端的进程不同,所以无法访问/usr/local/bin,必须添加-l以登录用户身份运行命令。 Runtime.getRuntime().exec(new String[]{"bash", "-l", "-c", cmd}, null, new File(f))