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

时间:2017-01-09 18:37:18

标签: 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.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   error = 2,系统找不到指定的文件

如果我使用java -versionnode -v对其进行测试,则可以正常使用。

我有一个有效的解决方案,但我不喜欢它,它有点乱。我创建了一个bat文件:

//test.bat
rollup -v

然后我运行bat文件ProcessBuilder pb = new ProcessBuilder("test.bat");并且正在运行,但是将来我想将其他参数传递给rollup,我不想为每个参数创建不同的bat文件。

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

1 个答案:

答案 0 :(得分:1)

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

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

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