我正在尝试构建我的应用程序jar(非可执行jar)以及所有它的依赖项jar文件也要解压缩。
简单地解释我的问题,在eclipse中,要导出runnable / executable jar,有一个选项 "将所需的库提取到生成的Jar"
中请帮助我同样选择非runnable jar。
由于
答案 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依赖项,并在第一次启动胶囊时下载它们。