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会自动扫描。
正确的资源读取代码
直接使用资源文件名(或相对路径,如果资源在子目录下)即可:
- 通过类对象读取(带
/表示从类路径根开始):
object {}.javaClass.getResourceAsStream("/filename")
- 通过类加载器读取(不需要开头的
/,加了也能正常识别):
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
相关产品推荐
相关产品推荐

