代码之家  ›  专栏  ›  技术社区  ›  rilent

ProcessBuilder在Linux上运行jar

  •  0
  • rilent  · 技术社区  · 7 年前

    我正在尝试使用以下代码在Linux服务器上运行jar:

    private static final String directory = "/usr1/oracle/directory/";
    
    protected ProcessBuilder buildImportProcess(String[] args) {
        ProcessBuilder pb = new ProcessBuilder("/usr1/linktojava/java/jdk/java", "-jar", directory + "jartoexecute.jar",
                args[0], args[1], args[2]);
        pb.directory(new File(directory));
        return pb;
    }
    
    public int runJar(String[] args) {
        int status = 1;
        try {
            ProcessBuilder pb = buildImportProcess(args);
            Process process = pb.start();
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String s = "";
            while ((s = in.readLine()) != null) {
                logger.info(s);
            }
            status = process.waitFor();
        } catch (IOException | InterruptedException e) {
            logger.error(e.getMessage(), e);
        }
        return status;
    }
    

    我得到了这个错误:

    “/usr1/linktojava/java/jdk/java”(在目录中 “/usr1/oracle/directory”):错误=2,找不到文件或目录

    所有文件似乎都在正确的位置。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Thomas Fritsch    7 年前

    这个 java 可执行文件位于 jre/bin/ JDK的子目录。

    因此,要传递给 ProcessBuilder 会是 "/usr1/linktojava/java/jdk/jre/bin/java" 而不是 "/usr1/linktojava/java/jdk/java"