繁体   English   中英

如何在Eclipse的Maven项目中编译和运行Java应用程序?

[英]How to compile and run Java application within Maven project in Eclipse?

我有一个现有的Web应用程序A,它是Eclipse中的Maven项目。 它在Tomcat 8本地服务器上运行。 现在,我有一个Java应用程序B,它是一个单独的项目。 我已经将B导入到我的工作区中,而A作为另一个项目。 我试图运行一个主类(称为App.java ),该主类从A中的一个类存在于B中。A中的类如下:

public void runOrgReportUtility() throws IOException {
    int k = runProcess("javac /Users/ag/utilities/org-report-utility/src/main/java/com/vs/orgreport/App.java", null);
    if (k==0) {
        log.info("Compiled. Now trying to run class.");
        String commandStr = "java -cp /Users/ag/utilities/org-report-utility/src/main/java/com/vs/orgreport/ App";
        log.info("Command String: ");
        log.info(commandStr);
        runProcess(commandStr);
}

public int runProcess(String command, String[]) throws Exception {
    Process pro = Runtime.getRuntime().exec(command);
    pro.waitFor();
    return pro.exitValue();
  }

当我尝试运行A时,控制台给了我一个error: cannot find symbol为B中的各种类error: cannot find symbol 。这使我意识到,只有App.java被编译和运行,而B中的其他相关类却没有。

启动原始Web应用程序时,如何编译和运行第二个Java应用程序?

我尝试过的事情:

  • 设置(原始)项目引用以包含辅助Java应用
  • 将Java应用程序项目添加到原始项目的Java构建路径(在“ 项目”选项卡中)
  • 将Java应用程序添加到原始项目的部署程序集

要调用该应用程序时,请勿对其进行编译。 这不好:

  1. 由于所有依赖性,使用javac进行编译非常困难。 如您javac ,在单个Java文件上调用javac不是一件简单的事情。
  2. 为什么要等到尝试运行它后才发现有错误使其无法编译?
  3. 为什么每次运行时都会产生编译的开销?

通常,您将使用maven来编译B,并可能使用maven-shade-plugin创建一个包含B和所有依赖项(也称为“胖” jar)的B.jar。 然后,当A调用B时,可以在调用它包含的应用程序时将胖jar用作类路径。

您可能会考虑的其他事项:

  1. 您可能还可以在Web应用程序中包含胖子jar,这样就不必依赖于必须安装外部jar才能使Web应用程序完全发挥作用。
  2. 与其在单独的进程中执行其他应用程序, App.main()直接调用App.main()在同一个JVM中运行它。 您可能希望它在单独的线程中运行,这很容易做到。
  3. 如果您真的想要一个单独的OS进程,请使用ProcessBuilder而不是Runtime.exec 在许多情况下,它是易于使用和正确使用的API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM