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

时间:2016-07-21 22:23:39

标签: java junit classpath processbuilder

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

我可以从命令行运行相同的命令而不会出现问题。从ProcessBuilder运行时是否需要使用jar的绝对路径?或者我可以使用相对路径吗?

在命令行上运行

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

在我的应用程序中运行

junit库位于lib文件夹

应用/ 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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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