Java jar文件,其中包含所有未打包的依赖库

Java jar文件,其中包含所有未打包的依赖库,java,eclipse,jar,Java,Eclipse,Jar,我正在尝试构建我的应用程序jar(非可执行jar),其中包含所有需要解包的依赖jar文件 为了简单地解释我在eclipse中导出可运行/可执行jar的问题,有一个选项 “将所需库提取到生成的Jar中” 请帮助我为非可运行jar提供同样的选项 谢谢没有 正如背景:在JAR文件(有时称为fat-JAR或app-JAR)中打包依赖项不是本机Java机制,而是使用JAR中打包的自定义类加载器或启动脚本进行移植 如果使用Eclipse创建一个可运行的JAR文件,它将使用一个包装器来运行可以读取打包库的应用

我正在尝试构建我的应用程序jar(非可执行jar),其中包含所有需要解包的依赖jar文件

为了简单地解释我在eclipse中导出可运行/可执行jar的问题,有一个选项 “将所需库提取到生成的Jar中”

请帮助我为非可运行jar提供同样的选项

谢谢

没有

正如背景:在JAR文件(有时称为fat-JAR或app-JAR)中打包依赖项不是本机Java机制,而是使用JAR中打包的自定义类加载器或启动脚本进行移植

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

Manifest-Version: 1.0
Rsrc-Class-Path: ./ [removed]
Class-Path: .
Rsrc-Main-Class: com.example.Test
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
JarrScrLoader位于应用程序主类和Java运行时之间,然后可以在执行代码之前加载打包的依赖项。在库中没有Eclipse可以钩住的钩子,因为加载是由使用库的人完成的,您无法控制加载过程

通过解包依赖项,然后将它们重新打包到JAR中,可以将JAR文件组合成一个单独的JAR文件。请看下面的例子:

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

如果您想发布库和/或正确管理依赖关系,我建议您研究Maven()或Gradle()之类的构建系统。我个人更喜欢格拉德尔

编辑:这个项目似乎很有希望:

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

使用capsule,您可以选择将所有JAR和本机lib打包到capsule JAR中,也可以在清单中指定Maven依赖项,并在第一次启动capsule时下载它们