如何使用Process Builder在Java中运行NPM Command

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

import java.util.*;

public class TestUnZip {

public static void main(String[] args) throws IOException, InterruptedException{

String destFolder="E:\\TestScript";

/*

* Location where the Nodejs Project is Present

*/

System.out.println(destFolder);

String cmdPrompt="cmd";

String path="/c";

String npmUpdate="npm update";

String npm="npm";

String update="update";

File jsFile=new File(destFolder);

List<String> updateCommand=new ArrayList<String>();

updateCommand.add(cmdPrompt);

updateCommand.add(path);

updateCommand.add(npmUpdate);

runExecution(updateCommand,jsFile);

}

public static void runExecution(List<String> command, File navigatePath) throws IOException, InterruptedException{

System.out.println(command);

ProcessBuilder executeProcess=new ProcessBuilder(command);

executeProcess.directory(navigatePath);

Process resultExecution=executeProcess.start();

BufferedReader br=new BufferedReader(new InputStreamReader(resultExecution.getInputStream()));

StringBuffer sb=new StringBuffer();

String line;

while((line=br.readLine())!=null){

sb.append(line+System.getProperty("line.separator"));

}

br.close();

int resultStatust=resultExecution.waitFor();

System.out.println("Result of Execution"+(resultStatust==0?"\tSuccess":"\tFailure"));

}

}

上述程序工作正常,但是该程序取决于Windows机器,我也想在其他机器上运行相同的程序。

1)NPM是Command的捆绑包NodeJS。(我将NodeJS作为服务运行,已经定义了环境变量,因此可以从任何文件夹运行npm update命令)

2)如果不使用,我找不到解决方法来运行npm update命令"cmd", "/c"。如果我得到以下错误

线程“主”中的异常java.io.IOException:无法运行程序“ npm update”(在目录“ E:\

TestScript”中):CreateProcess error =

2,系统找不到在java.lang.ProcessBuilder.start中指定的文件(来源不明)

3)我们是否可以选择运行npm update命令作为参数Node.exe。如果是这样,任何人都可以为我提供适当的解决方法。

4)和我一样,我使用mocha框架运行测试脚本,结果生成.xml文件。

5)我还希望使用流程生成器调用mocha命令。

回答:

问题是在Windows

ProcessBuilder上不遵守PATHEXT变量。

没错npm,Windows上没有二进制文件,有一个npm.cmd。我最好的解决方案是检查平台。像这样:

static boolean isWindows() {

return System.getProperty("os.name").toLowerCase().contains("win");

}

static String npm = isWindows() ? "npm.cmd" : "npm";

static void run() {

Process process = new ProcessBuilder(npm, "update")

.directory(navigatePath)

.start()

}

以上是 如何使用Process Builder在Java中运行NPM Command 的全部内容, 来源链接: utcz.com/qa/421731.html

回到顶部