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