如何在我自己的Project JAR中包含外部JAR

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

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

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

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

  1. 在Package Explorer中右键单击项目名称,然后选择Export。
  2. 在Export屏幕中,选择Java – > Runnable JAR file和Next。
  3. 填写Runnable JAR文件规范屏幕并单击完成。

您可以选择是将依赖项包装作为单个jar文件打包还是将它们提取到生成的JAR中。

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

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

保持JAR分离更好,因为很容易将特定JAR升级到新版本而不涉及任何其他配置。 至于您必须将每个文件复制到JAR的相同位置的问题,您始终可以使用Java CLASSPATH并将任何JAR包含到应用程序的类路径中。

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

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

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

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

顺便说一下,如果你不和maven合作,可能这不是最简单的方法。