gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:52:58 26 4
gpt4 key购买 nike

我有一个现有的 Web 应用程序 A,它是 Eclipse 中的 Maven 项目。它在 Tomcat 8 本地主机服务器上运行。现在我有一个 Java 应用程序 B,它本身就是一个单独的项目。我已将 B 导入到我的工作区中,并将 A 作为另一个项目。我正在尝试从 A 中的类运行 B 中存在的主类(称为 App.java )。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 时,控制台为 B 中的各种类提供了一堆 错误:找不到符号。这让我意识到只有 App.java 正在编译和运行,而不是 B 中的其他依赖类。

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

我尝试过的事情:

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

最佳答案

当您想要调用应用程序时,请勿编译该应用程序。这很糟糕:

  1. 由于所有依赖项,使用 javac 编译很困难。正如您所发现的,这并不是在单个 java 文件上调用 javac 的简单问题。
  2. 为什么要等到尝试运行它时才发现存在导致编译失败的错误?
  3. 为什么每次运行都会产生编译开销?

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

您可能考虑的其他事项:

  1. 您还可以将 fat jar 包含在您的 Web 应用程序中,这样您就不需要依赖外部 jar 来使您的 Web 应用程序正常运行。
  2. 无需在单独的进程中执行其他应用程序,只需直接调用 App.main() 即可在同一 JVM 中运行它。您可能希望它在单独的线程中运行,这很容易做到。
  3. 如果您确实想要一个单独的操作系统进程,请使用 ProcessBuilder 而不是 Runtime.exec。在许多情况下,它是一个更容易使用和正确使用的 API。

关于java - 如何在Eclipse中的Maven项目中编译并运行Java应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38083801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com