如何在我自己的Project JAR中包含外部JAR
我有一个Java应用程序并创建了一个JAR文件并进行了部署。
该应用程序使用外部JAR,如Log4J JAR。 创建JAR文件时,如何将所有外部相关JAR包含到我的存档中?
为了让我的应用程序正常工作,我不得不将Log4J JAR复制到与我自己的JAR相同的目录中,这有点违背了jar的目的。 部署一个JAR文件不是更优雅吗?
如果您使用Eclipse,您可以将所有包含的文件解压缩到一个可运行的jar中,如下所示:
- 在Package Explorer中右键单击项目名称,然后选择Export。
- 在Export屏幕中,选择Java – > Runnable JAR file和Next。
- 填写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合作,可能这不是最简单的方法。
- 将String作为params从一个Java App传递到另一个Java App
- 使用maven和jetty创建一个可执行jar
- 如何使用Selenium / TestNG java文件中的IntelliJ制作可执行jar文件?
- SpringBoot完全可执行jar,里面没有依赖项
- 在IntelliJ IDEA中创建一个可删除的jar
- 如何在jar中打包opencv + java
- 创建一个用于从Java / Clojure执行的jar文件
- bouncycastle错误“JCE无法使用jar-with-dependencies”对提供程序BC进行身份validation
- 部署JavaFX应用程序,创建JAR以及自包含应用程序和本机安装程序的最佳方法是什么