Java 如何在自己的项目JAR中包含外部JAR

Java 如何在自己的项目JAR中包含外部JAR,java,executable-jar,Java,Executable Jar,我有一个Java应用程序,创建了一个JAR文件并部署了它 该应用程序使用外部JAR,比如log4jjar。创建JAR文件时,如何将所有外部相关JAR包含到存档中 为了让我的应用程序正常工作,我不得不将log4jjar复制到与我自己的JAR相同的目录中,这有点违背了JAR的用途。部署一个JAR文件不是更优雅吗?您可以使用类似的东西将Java应用程序及其依赖项打包到一个可执行的JAR文件中(一个JAR使用自定义类加载器使JAR嵌套成为可能).您必须将库jar扩展到编译类所在的位置,然后从中创建一个j

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

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


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

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

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

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

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


正如其他海报所指出的,如果你想要创建一个超级JAR,你可以使用一些选项。

你可以使用Maven+assembly插件()


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

将JAR分开比较好,因为只将特定的JAR升级到新版本很容易,而不需要接触任何其他配置。由于您需要将每个文件复制到与JAR相同的位置,所以您可以始终使用Java
CLASSPATH
并将任何JAR包含到应用程序的类路径中。

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

  • 在包资源管理器中右键单击项目名称,然后选择“导出”
  • 在导出屏幕中,选择Java->Runnable JAR文件,然后单击下一步
  • 填写Runnable JAR文件规范屏幕并完成

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

    非常感谢所有花时间回复的人。我会看看我的选择,然后从那里开始。问候约翰