自动处理依赖项

时间:2012-08-12 12:05:30

标签: java netbeans

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

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

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

由于我的项目使用了大量的库,我能否以某种方式自动处理所有Classpath

3 个答案:

答案 0 :(得分: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只是作为系统上其他程序的命令行启动程序。

答案 1 :(得分:0)

我会直接运行第二个应用程序的main方法,而不是生成一个新进程。处理外部进程有点复杂,特别是如果它从控制台读取。

答案 2 :(得分:0)

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

相关问题