java - 自动处理依赖关系

标签 java netbeans

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

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

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

由于我的项目使用大量库,我可以以某种方式自动处理所有类路径吗?

最佳答案

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

我还猜测,即使您使用 Maven 或 Ant 之类的东西,如果您正在使用单独的类路径构建两个单独的 Java 应用程序(但一个知道另一个的类路径,那么您可以执行类似的操作,以告诉 ProcessBuilder 如何为您的第二个应用程序找到正确的 JAR 和类文件:

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 只是充当系统上其他程序的命令行启动器。

关于java - 自动处理依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922017/

相关文章:

java - 将函数输出保存到 Firebase 和 Android 的变量

java - 是否可以向 JSF bean 添加自定义验证?

java - 是否无法从 Netbeans 中的主 JFrame [另存为 MainJFrame.java] 调用另一个 JInternalFrame 或 JPanel [另存为 NewJIF.java]?

java - JSF 页面从实体类生成代码

java - 如何使用 hibernate 映射自定义枚举整数序数?

java - 如何使用TestNG创建多用户测试场景?

netbeans - 如何设置 Netbeans 操作项过滤器以忽略第三方文件夹?

netbeans - 为什么我的托管 Bean 中不能有静态公共(public)字段?

java - 图像未显示在 JSP 文件中

Java - 常量类设计