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

时间:2010-09-16 16:31:16

标签: java executable-jar

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

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

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

6 个答案:

答案 0 :(得分:6)

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

  1. 右键单击Package Explorer中的项目名称,然后选择Export。
  2. 在导出屏幕中,选择Java - > Runnable JAR文件和Next。
  3. 填写Runnable JAR文件规范屏幕并完成。
  4. 您可以选择是将依赖项包装作为单个jar文件打包还是将它们提取到生成的JAR中。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

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

正如其他海报所述,如果你想要的话,你可以选择创建一个超级JAR。

答案 5 :(得分:0)

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

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