1

我正在 Netbeans 中开发两个 Java 应用程序,我需要在第一个应用程序中运行第二个应用程序。我使用以下代码执行此操作:

ProcessBuilder pb = new ProcessBuilder("java", "Second App Main Class Name");
pb.start();

问题是第二个应用程序有大量依赖项,我在 Netbeans 中添加了这些依赖项作为引用。但是当我使用上面的代码运行它时,Java 显然找不到它们。

由于我的项目使用了很多库,我可以Classpath以某种方式自动处理所有这些吗?

4

3 回答 3

1

好吧,这里的问题是您实际上并没有在环境中为您的第二个 Java 应用程序配置类路径,因此即使您可以调用主类本身(如您所说),也找不到其他依赖项。

我还猜想,即使您使用 Maven 或 Ant 之类的东西,如果您正在构建两个具有不同类路径的独立 Java 应用程序(但一个知道另一个的类路径,那么您可以这样做以便告诉 ProcessBuilder 如何为您的第二个应用程序找到正确的 JAR 和 Class 文件:

public int exec(Class<?> clazz) throws IOException,
                                           InterruptedException {
    String javaHome = System.getProperty("java.home");
    String javaBin = javaHome +
            File.separator + "bin" +
            File.separator + "java";

    /* This is where you want to set up your Classpath for the second app */
    String classpath = System.getProperty("java.class.path");
    String className = clazz.getCanonicalName();

    ProcessBuilder builder = new ProcessBuilder(
            javaBin, "-cp", classpath, className);

    Process process = builder.start();
    process.waitFor();
    return process.exitValue();
}

但我质疑您为什么要从 NetBeans 启动应用程序 - 假设您最终需要从命令行启动这两个应用程序。如果您无法从命令行启动应用程序,那么您也无法从 Java 启动它们。ProcessBuilder 只是充当系统上其他程序的命令行启动器。

于 2012-08-12T14:58:04.890 回答
0

我会直接运行第二个应用程序的main方法,而不是产生一个新进程。处理外部进程有些复杂,尤其是从控制台读取时。

于 2012-08-12T12:08:55.483 回答
0

您可以使用 Maven 或 Ant 之类的构建工具,并根据您的工具将项目导入为 Maven 或 Ant 项目。Maven 很好地处理传递依赖。查看此链接以获取 Maven 文档:http ://maven.apache.org/

于 2012-08-12T14:03:18.897 回答