11

我有一个 Java 应用程序并创建了一个 JAR 文件并进行了部署。

该应用程序使用外部 JAR,例如 Log4J JAR。创建 JAR 文件时,如何将所有外部相关 JAR 包含到我的存档中?

为了让我的应用程序正常工作,我不得不将 Log4J JAR 复制到与我自己的 JAR 相同的目录中,这有点违背了 jar 的目的。部署 1 个 JAR 文件不是更优雅吗?

4

6 回答 6

7

如果您使用 Eclipse,您可以将所有包含的文件提取到一个可运行的 jar 中,如下所示:

  1. 在包资源管理器中右键单击您的项目名称,然后选择导出。
  2. 在导出屏幕中,选择 Java -> 可运行的 JAR 文件,然后选择下一步。
  3. 填写 Runnable JAR File Spec 屏幕并完成。

您可以选择是否将依赖 jar 打包为单独的 jar 文件或将它们提取到生成的 JAR 中。

于 2013-01-16T22:02:11.883 回答
4

您可以使用One-JAR 之类的东西将 Java 应用程序及其依赖项打包到单个可执行 Jar 文件中(One-JAR 使用自定义类加载器使 JAR 嵌套成为可能)。

于 2010-09-16T16:35:15.787 回答
2

您必须将库 jar 扩展到您编译的类所在的相同位置,然后从中制作一个 jar。根据构建过程的设置方式,可能有多种方法可以实现此目的。这不是火箭科学——jar 只是一个 zip 存档,根目录有一个 META-INF 目录。

于 2010-09-16T16:42:49.407 回答
2

保持 JAR 独立会更好,因为只需将特定 JAR 升级到其新版本即可,无需触及任何其他配置。由于您必须将每个文件复制到与 JAR 相同的位置,您始终可以使用 JavaCLASSPATH并将任何 JAR 包含到应用程序的类路径中。

于 2010-09-16T18:18:22.070 回答
0

您可以使用 Maven + 程序集插件(http://maven.apache.org/plugins/maven-assembly-plugin/

顺便说一句,如果您不使用 Maven,这可能不是最简单的方法。

于 2010-09-16T17:21:05.430 回答
0

正如您所发现的,JAR 本身不能嵌套其他 JAR。

传统上,人们会分发一个 ZIP 存档或其他安装程序,这些安装程序将展开应用程序 JAR(您的)以及任何支持 JAR 的适当位置以进行类路径访问。然后,经常通过调用主 JAR 并创建列出支持 JAR 的类路径的脚本调用应用程序。

正如其他海报所指出的那样,如果您想要的话,您可以选择创建一个超级 JAR。

于 2010-09-16T17:12:48.547 回答