Java,由以下原因引起:Java.io.IOException:error=2,没有这样的文件或目录

Java,由以下原因引起:Java.io.IOException:error=2,没有这样的文件或目录,java,command,Java,Command,大家好,我在使用Java执行命令时遇到了一个奇怪的问题。我使用以下代码运行命令,如果我运行mkdir testFolder,程序将成功运行,但是如果我更改了命令,如warn-v 然后错误就发生了 java.io.IOException: Cannot run program "yarn": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) a

大家好,我在使用Java执行命令时遇到了一个奇怪的问题。我使用以下代码运行命令,如果我运行
mkdir testFolder
,程序将成功运行,但是如果我更改了命令,如
warn-v
然后错误就发生了

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)
p/s:在调试模式下:IntelliJ可以运行上述代码,但Netbeans失败

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

编辑2:

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

我发现如果我运行
/bin
/usr/bin
中的命令,代码运行正常(pwd、mkdir、java-version…),但纱线在
/usr/local/bin/
中,因此它不起作用,我仍然不知道如何修复。

因为
错误
代码2表明您指定的路径不正确。错误代码对应于POSIX
enoint
和其
char*strerror(int errno)
表示的“无此类文件或目录”

要自己解决问题,您可以阅读手册页

有关章节如下:

埃诺特

文件名、脚本或ELF解释器不存在 存在,或文件或解释器所需的共享库 找不到


要查看进程的具体路径,请运行java witj
strace-f

我最终找到了答案,因为我启动的进程与终端的进程不同,因此无法访问/usr/local/bin,必须添加
-l
以登录用户身份运行命令。
Runtime.getRuntime().exec(新字符串[]{“bash”、“-l”、“-c”、cmd},null,新文件(f))

在我的例子中,我使用了一个ANT脚本,在某个点上称为javac task,具有fork=true属性。受maphongba008答案的启发,我删除了那个fork,因此我不再出现同样的错误。

这对我来说很有效:

  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

您的机器上是否安装了
warn
?是否尝试将可执行文件与其参数分离?我不知道在使用
Runtime
时这是否是一个问题,但这是在安装了
ProcessBuilder
@vahdet-warn并且我可以使用命令运行该命令时发生的line@SomeName我刚刚搜索了
strace
,但在macQuick Google上可能无法找到,因为DTrace可以用于此目的。这也可能是相关的
npm install -g yarn