使用Java ProcessBuilder调用全局安装的节点模块

使用Java ProcessBuilder调用全局安装的节点模块,java,node.js,batch-file,npm,Java,Node.js,Batch File,Npm,我全局安装了一个节点模块:rollup,但可以是任何其他模块。如果我打开命令提示符(win 10)并键入rollup-v,它将返回模块版本。我试图用java中的ProcessBuilder/Process来实现这一点 以下是我的java代码: ProcessBuilder pb = new ProcessBuilder("rollup","-v"); File log = new File("log.txt"); pb.redirectErrorStream(true); pb.redirect

我全局安装了一个节点模块:
rollup
,但可以是任何其他模块。如果我打开命令提示符(win 10)并键入
rollup-v
,它将返回模块版本。我试图用java中的
ProcessBuilder
/
Process
来实现这一点

以下是我的java代码:

ProcessBuilder pb = new ProcessBuilder("rollup","-v");
File log = new File("log.txt");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));

Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
它返回以下错误:

java.io.IOException:无法运行程序“汇总”:CreateProcess 错误=2,系统找不到指定的文件

如果我用
java-version
node-v
测试它,它就工作了

我有一个可行的解决方案,但我不喜欢,而且有点凌乱。我创建了一个bat文件:

//test.bat
rollup -v
然后我运行bat文件
ProcessBuilderPB=newProcessBuilder(“test.bat”)
和正在工作,但将来我想将其他参数传递给
汇总
,我不想为每个参数创建不同的bat文件


我想我错过了什么,我不知道是什么?我是处理api的新手。

不是第一个问题的解决方案,而是解决方法:

您可以将
test.bat
更改为
rollup%*
并使用参数调用它

在这种情况下,
%*
表示提供给批处理文件的所有参数。这样,您就可以根据需要使用不同的参数从程序中调用它