【问题标题】:How do I include external JARs in my own Project JAR如何在我自己的项目 JAR 中包含外部 JAR
【发布时间】:2010-09-16 16:31:16
【问题描述】:

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

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

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

【问题讨论】:

  • 非常感谢所有花时间回复的人。我将查看我拥有的选项并从那里获取它。问候约翰

标签: java executable-jar


【解决方案1】:

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

  1. 在包资源管理器中右键单击您的项目名称并选择导出。
  2. 在 Export 屏幕中,选择 Java -> Runnable JAR file 和 Next。
  3. 填写 Runnable JAR File Spec 屏幕并完成。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如您所见,JAR 本身不能嵌套其他 JAR。

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

          正如其他发帖者所指出的,如果你想要的话,你可以选择创建一个超级 JAR。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 2012-06-05
              • 2014-08-07
              • 2020-06-22
              • 1970-01-01
              • 1970-01-01
              • 2011-03-15
              • 1970-01-01
              • 2018-12-19
              • 1970-01-01
              相关资源
              最近更新 更多