使用 -cp 和 jar 位置无法使用 Java ProcessBuilder 找到或加载 class

Can not find or load class with Java ProcessBuilder using -cp and jar location

我正在尝试使用 ProcessBuilder 在我的 Java 应用程序中启动 JUnit 测试。

我能够从命令行 运行 毫无问题地执行相同的命令。从 ProcessBuilder 中 运行ning 时我需要使用 jar 的绝对路径还是可以使用相对路径?

运行 命令行

java -cp .;lib/junit-4.12.jar org.junit.runner.JUnitCore com.test.Test1

运行 在我的应用程序中

junit 库在 lib 文件夹中

application/lib/junit-4.12.jar

        ProcessBuilder builder = new ProcessBuilder(new String[] {"java", "-cp", ".;lib/junit-4.12.jar", "com.test.Test1"});

        Process process = builder.start();
        process.waitFor();

        debug("process ended");
        debug("process.exitValue() = " + process.exitValue());

输出:

process ended
process.exitValue() = 1
Error: Could not find or load main class org.junit.runner.JUnitCore

您可以在 运行 您的应用程序中找到类路径,方法是使用 System.getProperty("java.class.path"); 然后,相应地修改 ProcessBuilder() 语句中的 "cp"。

设置您要使用的 ProcessBuilder 的基本目录。

File libDir = new File("/opt/app/lib");
builder.directory(libDir);

这是我在@mazaneicha 评论重新查看应用程序的类路径目录后最终使用的解决方案。