Как запустить команду NPM в коде Java с использованием ProcessBuilder - PullRequest
2 голосов
/ 07 мая 2019

Моя среда Mac. Я пытаюсь запустить "npm ls" из моего кода Java, но он выдает сообщения об ошибках.

Мой код Java:

String npm = isWindows() ? "npm.cmd" : "npm";

System.out.println(rootStr);
Process process = new ProcessBuilder(npm, "ls").directory(new File(rootStr)).start();

Сообщение об ошибке:

Users/youngeun/Downloads/zenbot_unstable
java.io.IOException: Cannot run program "npm" (in directory "/Users/youngeun/Downloads/zenbot_unstable"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at com.iotcube.scanner.nodejs.npm.NpmService.npmInfo(NpmService.java:26)
    at com.iotcube.scanner.IotcubescannerApplication.main(IotcubescannerApplication.java:174)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 2 more

Но, похоже, он отлично работает в моем терминале:

| ~/Downloads/zenbot_unstable @ Youngeunui-MacBook-Pro (youngeun) 
| => npm ls
zenbot4@4.1.0 /Users/youngeun/Downloads/zenbot_unstable
├─┬ @babel/core@7.2.2
│ ├─┬ @babel/code-frame@7.0.0
│ │ └─┬ @babel/highlight@7.0.0
│ │   ├── chalk@2.4.2 deduped
│ │   ├── esutils@2.0.2 deduped
│ │   └── js-tokens@4.0.0
│ ├─┬ @babel/generator@7.3.0
│ │ ├── @babel/types@7.3.0 deduped
│ │ ├── jsesc@2.5.2
│ │ ├── lodash@4.17.11 deduped
...

Я пробовал решения на других страницах stackoverflow, но ни одна из них, похоже, не работает ... Я так потерян .. Я был бы признателен за вашу помощь. спасибо

1 Ответ

2 голосов
/ 07 мая 2019

Попробуйте указать полный путь к исполняемому файлу npm:

String dir = "/Users/youngeun/Downloads/zenbot_unstable";
String npm = dir + "/npm";
Process p = new ProcessBuilder(npm, "ls")
                .director(new File(dir))
                .start();
p.waitFor();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...