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

时间:2019-02-18 07:46:43

标签: 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)

嗨,我在使用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();
}

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

我发现,如果我运行/bin/usr/bin中的命令,代码可以正常运行(pwd,mkdir,java -version ...),但是yarn在{{1 }},所以它不起作用,而且我仍然不知道如何解决。

4 个答案:

答案 0 :(得分:0)

由于error代码2提示您错误地指定了路径。错误代码对应于POSIX ENOENT,其char * strerror(int errno)表示形式为“ No such file or directory”。

要自行解决问题,请阅读手册页http://man7.org/linux/man-pages/man2/execve.2.html

相关部分是:

  

ENOENT

     

文件名或脚本或ELF解释器没有   存在,或文件或解释器需要共享库   找不到。

要查看您的进程使用了​​哪个微粒路径,请运行java witj strace -f

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在我的情况下,我使用了一个ANT脚本,该脚本有时被称为javac task,具有fork = true属性。受maphongba008答案的启发,我删除了该分叉,所以我不再遇到相同的错误。

答案 3 :(得分:0)

这对我有用:

npm install -g yarn