从其他 2 个可执行 jar 创建一个可执行 jar

Creating an executable jar from 2 other executable jar

我想从另外 2 个可执行 jar 文件创建一个可执行 jar 文件。 所以我正在做一个博彩项目,我有 2 个项目,Client 和 Monitor。我创建了他们的 jar 文件,一切都很好。 但是有没有一种方法可以合并他们的 jar 文件,这样我就可以从 1 个 jar 文件中 运行,这样我就不必每次 client.jar 和 monitor.jar 都 运行?

创建另一个项目并将这两个 jar 文件包含在第三个的 class 路径中。

现在您可以从 jar A 和 Jar B 的 main 方法中复制相同的代码,并将其粘贴到 jar C 的 main 方法中。现在您可以 运行 只有 Jar C.

But is there a way to combine their jar files so i can run both from 1 jar

没有简单的方法,只能解压缩,然后获取所有要提取的 jar 文件的所有内容,然后再次压缩到一个 jar 中。

您在合并 Manifest.MF 文件时需要谨慎,该文件定义了具有 main 方法的 main class 的入口点。

Note: But I am not sure if you will be able to have 2 main class in your manifest file. You might have to execute via classpath in such case.

我正在为 java 使用 netbeans。 您想要的最简单方法是创建新项目并将 2 个 jar 文件作为库添加到您的项目

可以将这两个 jar 文件合并为一个 jar 文件,但是,每个 jar 文件只能有一个 main class 如果没有 main class 则获得 运行通过命令行指定。

这意味着您将不得不创建一个新的 main class 来执行两个先前的 main classes,或者最终 运行 使用不同的参数两次使用相同的 jar 文件.

但是,我不建议将这两者结合起来。这两个是单独的项目是有原因的,那么为什么要将它们结合起来呢?此外,如果一个 jar 文件崩溃,第二个仍然 运行.

如果您仍想将这两者结合起来,我看到两个选项:

  • 要么创建第三个项目(我假设是 maven?),它依赖于两个项目并包含新的主要 class
  • 或者,如果您 运行 遇到 class 加载问题,因为第一种方法会将 jars 放入 jar 文件中,您可以使用 maven shade 插件来获取一个平面 jar 文件。如果您使用无法控制资源加载方式的第三方库,这有时是必要的。