解压缩所有依赖库的jar文件

时间:2014-04-20 08:32:28

标签: java eclipse jar

我正在尝试构建我的应用程序jar(非可执行jar)以及所有它的依赖项jar文件也要解压缩。

简单地解释我的问题,在eclipse中,要导出runnable / executable jar,有一个选项    "将所需的库提取到生成的Jar"

请帮助我同样选择非runnable jar。

由于

2 个答案:

答案 0 :(得分:1)

不,没有。

正如背景:JAR文件(有时称为胖jar或app jar)中的打包依赖关系不是本机Java机制,而是使用自定义ClassLoader或启动JAR中打包的脚本来嫁接。

如果使用Eclipse创建可运行的JAR文件,它使用包装器来运行可以读取打包库的应用程序。如果您打开导出的JAR文件并查看它的Manifest:

,您可以看到这一点
Manifest-Version: 1.0
Rsrc-Class-Path: ./ [removed]
Class-Path: .
Rsrc-Main-Class: com.example.Test
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

JarRsrcLoader位于应用程序Main-Class和Java Runtime之间,然后可以在执行代码之前加载打包的依赖项。在库中没有Eclipse可以挂钩的钩子,因为加载是由使用你的库的人完成的,你无法控制加载过程。

通过解压缩依赖关系然后将它们重新打包到JAR中,可以将JAR文件组合成一个文件。在这里查看例如:How to combine two Jar files

请注意,通过重新打包第三方JAR,您可能会遇到已签名类或元数据冲突的问题。

如果您想要正确发布库和/或管理依赖项,我建议您查看Maven(http://maven.apache.org/)或Gradle(http://www.gradle.org/)等构建系统。我个人更喜欢Gradle。

修改:这个项目看起来很有希望:https://github.com/puniverse/capsule

答案 1 :(得分:1)

使用Capsule。它可以完成您想要的一切,包括在清单中设置JVM配置。

使用Caps,您可以选择将所有JAR和本机库包装到胶囊JAR中,或者您可以在Manifest中指定Maven依赖项,并在第一次启动胶囊时下载它们。