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

Gradle Kotlin项目无法访问src/main/resources资源问题咨询

Gradle Kotlin项目资源文件加载问题解决

核心问题是你在资源路径里多写了/resources/前缀,这完全没必要。

Gradle构建时,src/main/resources下的所有文件会被直接复制到build/resources/main目录,而这个目录和build/classes/kotlin/main一样,都是JVM的类路径根目录。JVM会自动扫描所有类路径根下的文件,你不需要手动去定位到build/resources/main目录。

错误原因分析

  • 你用object {}.javaClass.getResourceAsStream("/resources/filename")时,/表示从类路径根开始查找,但你加了resources/,相当于在找类路径根下的resources子目录里的文件,而实际上你的资源文件就在类路径根目录,自然找不到。
  • 类加载器的getResource("/")返回null是正常行为,因为类加载器的类路径是多个目录的集合,没法直接返回一个单一的根路径,不影响资源读取。
  • this.javaClass.getResource("/")显示build/classes/kotlin是因为当前类的字节码在这个目录下,它的类路径根就是这个目录,但资源所在的build/resources/main同样是类路径的一部分,JVM会自动扫描。

正确的资源读取代码

直接使用资源文件名(或相对路径,如果资源在子目录下)即可:

  1. 通过类对象读取(带/表示从类路径根开始):
object {}.javaClass.getResourceAsStream("/filename")
  1. 通过类加载器读取(不需要开头的/,加了也能正常识别):
object {}.javaClass.classLoader.getResourceAsStream("filename")
// 或者
object {}.javaClass.classLoader.getResourceAsStream("/filename")

如果你的资源文件放在src/main/resources的子目录里,比如src/main/resources/config/filename,那路径就写成/config/filename或者config/filename即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:30:41