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

getClass().getResource()加载jar包内资源失败的路径问题求解

getResource()资源加载失败修复方案

核心认知偏差

你预期查找路径为build/resources本身是错误的:

标准Gradle/Maven项目编译阶段,src/main/resources下的所有文件会被自动复制到类路径根目录:

  • 开发未打包阶段:类路径根为build/classes/java/main(Gradle)或target/classes(Maven)
  • 打包成jar后运行阶段:类路径根为jar包内部的根目录
    getClass().getResource()本身的查找逻辑没有问题,你遇到的报错100%是路径写法错误导致。

常见路径写法错误

  • 错误1:带源码目录前缀,比如写getClass().getResource("src/main/resources/xxx.png"),编译后不存在src目录,必然找不到
  • 错误2:使用相对路径未加前缀斜杠:如果你的调用类位于com.xxx.xxx包下,不带斜杠的写法getClass().getResource("xxx.png")会去类路径下的com/xxx/xxx/目录查找资源,而不是类路径根目录
  • 错误3:大小写不匹配:jar包内路径大小写敏感,本地开发Windows环境大小写不敏感没报错,打包到Linux或读取jar内部路径时就会加载失败

正确写法示例

  • 如果你把图片放在src/main/resources/icon.png,要从类路径根查找,写法为:
    getClass().getResource("/icon.png")
  • 也可以用类加载器查找,默认从类路径根出发,不需要加斜杠:
    getClass().getClassLoader().getResource("icon.png")
  • 如果资源放在子目录,比如src/main/resources/assets/login.png,对应写法为:
    getClass().getResource("/assets/login.png")

快速排查步骤

  • 开发阶段先打开build/classes/java/main目录,确认你的资源文件已经被复制到对应路径,没有被build配置过滤
  • 打包后直接解压jar包,查看资源在jar内的实际路径,直接匹配该路径写查找规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:03