如何在Java中从java/目录而非resources/加载.json文件?
实现Java源码目录下共存JSON文件的Gradle配置方案
核心思路
Java默认仅将src/main/resources下的文件识别为资源,但通过Gradle可以扩展资源集合,让源码目录(如src/main/java)中的JSON文件也被纳入资源编译和打包流程,同时保留其与源码同目录的结构,方便开发时就近查看维护。
具体配置步骤
1. Groovy DSL 配置(build.gradle)
在构建脚本中添加资源集扩展配置:
sourceSets { main { resources { // 保留原有resources目录的资源配置 srcDirs += 'src/main/resources' // 将源码目录加入资源目录集合 srcDirs += 'src/main/java' // 仅包含源码目录下的JSON文件,避免误打包其他类型文件 include '**/*.json' } } }
2. Kotlin DSL 配置(build.gradle.kts)
对应Kotlin语法的配置如下:
sourceSets { main { resources { srcDirs("src/main/resources", "src/main/java") include("**/*.json") } } }
读取JSON文件的注意事项
配置完成后,读取JSON文件时需遵循源码中的相对路径结构。例如,若JSON文件位于src/main/java/com/example/demo/model/UserConfig.json,读取路径应为/com/example/demo/model/UserConfig.json,示例读取代码:
InputStream inputStream = getClass().getResourceAsStream("/com/example/demo/model/UserConfig.json"); // 后续JSON解析逻辑...
可选优化
- 若IDE未对源码目录下的JSON文件提供语法高亮,可检查IDE设置(如IntelliJ IDEA默认支持JSON文件识别),确保文件类型被正确关联。
- 如需排除特定目录下的JSON文件,可在配置中添加
exclude规则,例如exclude '**/temp/*.json'。
内容的提问来源于stack exchange,提问作者Marian Klühspies
相关产品推荐
相关产品推荐

