Java ProcessBuilder使用-cp和jar位置找不到或加载类

4

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

我可以在命令行中运行相同的命令而没有问题。在使用ProcessBuilder时,我需要使用绝对路径来运行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
2个回答

2

当您运行应用程序时,可以使用 System.getProperty("java.class.path") 查找类路径。然后,相应地修改ProcessBuilder()语句中的“cp”。


我该如何在ProcessBuilder语句的-cp中使用多个库?一旦我有了一个以上的库,“one.jar;two.jar”将会失败,但“one.jar”将会成功。 - ALM
你可以使用另一个系统属性 System.getProperty("path.separator"); 来找到正确的分隔符。它们与操作系统有关。此外,还可以查看其他有关该主题的 SO 帖子: https://dev59.com/92855IYBdhLWcg3wHwaH - mazaneicha

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接