首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ProcessBuilder在Java代码中运行NPM命令

如何使用ProcessBuilder在Java代码中运行NPM命令
EN

Stack Overflow用户
提问于 2019-05-07 17:56:05
回答 2查看 613关注 0票数 3

我的环境是mac。我试图从我的java代码中运行"npm ls“,但它抛出了错误消息。

我的java代码:

代码语言:javascript
复制
String npm = isWindows() ? "npm.cmd" : "npm";

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

错误消息:

代码语言:javascript
复制
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

但它似乎在我的终端上工作得很好:

代码语言:javascript
复制
| ~/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页面的解决方案,但似乎都不起作用……我太迷茫了。我将非常感谢你的帮助。谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-05-07 18:12:51

尝试提供npm可执行文件的完整路径:

代码语言:javascript
复制
String dir = "/Users/youngeun/Downloads/zenbot_unstable";
String npm = dir + "/npm";
Process p = new ProcessBuilder(npm, "ls")
                .director(new File(dir))
                .start();
p.waitFor();
票数 2
EN

Stack Overflow用户

发布于 2020-07-11 04:46:07

如果你正在寻找一些来自NPM的简单的东西,比如下载包并在本地提取它,或者搜索包或类似的东西:有另一种方法使用java本地库来使用NPM注册表:https://github.com/OrienteerBAP/JNPM

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56019990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档