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

Vas*_*raj 2 java processbuilder node.js npm

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的程序工作正常,但这个程序依赖于Windows机器,我想在其他机器上运行相同的程序.

1)NPM是一个命令来源NodeJS.(我运行NodeJS作为服务,我已经定义了环境变量,所以我可以从任何文件夹运行npm update命令)

2)我找不到一个解决方法来运行npm update命令而不使用"cmd", "/c".如果我这样做,我会得到以下错误

线程"main"中的异常java.io.IOException:无法运行程序"npm update"(在目录"E:\ TestScript"中):CreateProcess error = 2,系统找不到java.lang.ProcessBuilder.start中指定的文件(未知来源)

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

4)我喜欢,我使用mocha框架来运行测试脚本,结果生成.xml文件.

5)我希望使用流程构建器调用mocha命令.

wol*_*yst 5

问题是ProcessBuilder不尊重Windows上的PATHEXT变量.

确实npmWindows上没有二进制文件,有一个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()
}
Run Code Online (Sandbox Code Playgroud)