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


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

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

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


8989
2017-09-16 16:31


起源

非常感谢所有花时间回应的人。我将看看我的选项并从那里拿走它。关心约翰 - Wilko


答案:


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

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

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


6
2018-01-16 22:02





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


4
2017-09-16 16:35





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


2
2017-09-16 16:42





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


2
2017-09-16 18:18





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

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

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


0
2017-09-16 17:12





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

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


0
2017-09-16 17:21