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

如何使用ProcessBuilder在Java代码中运行NPM命令,java,npm,Java,Npm,我的环境是mac。 我试图从java代码中运行“NPMLS”,但它会抛出错误消息 我的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/zenbo

我的环境是mac。 我试图从java代码中运行“NPMLS”,但它会抛出错误消息

我的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
我尝试过其他stackoverflow页面的解决方案,但似乎都不起作用。。。
我太迷路了。。谢谢你的帮助。谢谢

尝试提供
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();

如果您正在NPM中寻找一些简单的东西,比如下载包并在本地提取,或者搜索包或类似的东西:有另一种方法-使用java本机库处理NPM注册表:

进程不继承系统环境变量,因此,您需要确切地知道
npm
二进制文件的位置。非常感谢!现在,错误消息不会显示。尽管如此,该进程仍在运行。waitFor();返回1,表示失败。我不知道怎么了..使用
ProcessBuilder.redirectError()
或其他方法重定向
进程
错误输出。它应该显示错误消息。
String dir = "/Users/youngeun/Downloads/zenbot_unstable";
String npm = dir + "/npm";
Process p = new ProcessBuilder(npm, "ls")
                .director(new File(dir))
                .start();
p.waitFor();