Java,由以下原因引起:Java.io.IOException:error=2,没有这样的文件或目录
大家好,我在使用Java执行命令时遇到了一个奇怪的问题。我使用以下代码运行命令,如果我运行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
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表明您指定的路径不正确。错误代码对应于POSIXenoint
和其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