java - ProcessBuilder 在 Linux 上运行 jar

标签 java linux jar processbuilder

我正在尝试使用以下代码在 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;
}

我得到这个错误:

java.io.IOException: Cannot run program "/usr1/linktojava/java/jdk/java" (in directory "/usr1/oracle/directory"): error=2, File or directory not found

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

最佳答案

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

因此,传递给 ProcessBuilder 的正确路径 将是 "/usr1/linktojava/java/jdk/jre/bin/java" 而不是 "/usr1/linktojava/java/jdk/java"

关于java - ProcessBuilder 在 Linux 上运行 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497806/

相关文章:

java - 从一个列表中选择另一个列表中的值 HQL

java - 使用java代码从Linux机器访问共享文件夹

java - 有没有一种方法可以使用 -cp 或 -jar 作为一个命令来运行多个 jar 文件?

java - 我可以在哪里放置我的 java 库,以便它们在使用 javac 时始终位于类路径中?

java - 递归计算PI

java - 无法在项目 prj : Could not resolve dependencies for project 上执行目标

java - Eclipse + Tomcat - 直接从工作区提供 webapp

c - 如果数据是大多数排序的,我应该使用哪种数据结构?

objective-c - Objective-C 是否编译为 native 代码或字节码?

java - 请求 : Microsoft SQL Server JDBC Driver 1. 1