You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

java -jar无法识别内嵌依赖.jar文件问题求助

问题原因及解决办法

核心原因

Java的java -jar命令解析MANIFEST.MF里的Class-Path时,只会从主jar所在的文件系统目录(或指定的相对/绝对路径)查找依赖jar,不会扫描主jar内部的嵌套jar文件。

你把snakeyaml-1.28.jar打包进compare-yaml.jar后,它只是主jar里的一个普通资源文件,Java类加载器不会将其当作类路径的一部分解析,自然找不到org.yaml.snakeyaml.Yaml类。而当你把依赖jar放在主jar同级目录时,刚好符合Class-Path: snakeyaml-1.28.jar的路径规则,类加载器能正常找到并加载依赖类,程序就能正常运行。

解决办法

有两种常用方案:

  • 打包成胖jar(Uber Jar):将snakeyaml-1.28.jar里的所有类直接合并到compare-yaml.jar中,让所有类都在同一个jar文件里,无需依赖外部jar。可以用Maven的maven-shade-plugin或Gradle的shadow插件自动完成合并,打包后直接执行java -jar即可正常运行。

  • 保持依赖jar与主jar分离:如果不想合并类,就把snakeyaml-1.28.jar放在和compare-yaml.jar同级的目录(或按照Class-Path指定的路径存放)。如果想把依赖统一放在子目录(比如lib/),可以修改MANIFEST.MF的Class-Path为:

    Class-Path: lib/snakeyaml-1.28.jar
    

    再把snakeyaml-1.28.jar放到主jar所在目录的lib子文件夹里即可。

内容的提问来源于stack exchange,提问作者Graeme Burton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:20:43