Java, вызвано: java.io.IOException: error = 2, нет такого файла или каталога - PullRequest
0 голосов
/ 18 февраля 2019
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: Inрежим отладки: 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 ...), но пряжа находится в /usr/local/bin/, поэтомуэто не сработало, и я до сих пор не знаю, как это исправить.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я наконец-то нашел ответ, потому что процесс, который я запускаю, отличается от процесса на терминале, поэтому не могу получить доступ к / usr / local / bin, нужно добавить -l, чтобы запустить команду как зарегистрированный пользователь.Runtime.getRuntime().exec(new String[]{"bash", "-l", "-c", cmd}, null, new File(f))

0 голосов
/ 18 февраля 2019

Поскольку error код 2 предполагает, что вы указали неверный путь.Код ошибки соответствует POSIX ENOENT, а "Нет такого файла или каталога" - его представлению char * strerror(int errno).

. Для самостоятельного устранения проблемы вы можете прочитать страницу руководства http://man7.org/linux/man-pages/man2/execve.2.html

Соответствующий раздел:

ENOENT

Файл с именем файла или сценария или интерпретатора ELF не существует, или не найдена общая библиотека, необходимая для файла или интерпретатора.

Чтобы увидеть, с каким конкретным путем идет ваш процесс, запустите java witj strace -f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...