我有一个Java应用程序并创建了一个JAR文件并进行了部署。
该应用程序使用外部JAR,例如Log4J JAR。创建JAR文件时,如何将所有外部相关JAR包含到我的存档中?
为了让我的应用程序正常工作,我不得不将Log4J JAR复制到与我自己的JAR相同的目录中,这有点违背了jar的目的。如果要部署一个JAR文件会不会更优雅?
答案 0 :(得分:6)
如果您使用Eclipse,您可以将所有包含的文件解压缩到一个可运行的jar中,如下所示:
您可以选择是将依赖项包装作为单个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一起工作,可能这不是最简单的方法。