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

Java测试类读取resources目录文件时getResource返回null问题求解

问题解决思路

根因说明

getResource()返回null的核心原因是运行测试时的classpath根路径下找不到testfile.json文件,常见触发场景如下:

  1. 构建工具未将src/main/resources下的资源文件复制到构建输出目录
  2. 测试运行时的classpath未包含main代码路径的输出目录
  3. 文件名大小写拼写不匹配(大小写敏感系统下会触发)

解决方案

按优先级逐一排查即可:

  • 第一步:验证资源文件是否已同步到构建输出目录
    • Maven项目查看target/classes目录下是否存在testfile.json
    • Gradle项目查看build/resources/main目录下是否存在testfile.json
      若不存在,执行一次构建命令同步资源:
      Maven执行:mvn clean compile
      Gradle执行:gradle clean compileJava
  • 第二步:检查构建配置是否排除了资源文件
    打开Maven的pom.xml或者Gradle的build.gradle,确认没有配置规则排除json类型的资源文件,如下方错误配置需要删除:
    <!-- 错误的Maven资源排除配置,会导致json文件不被打包 -->
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <excludes>
            <exclude>*.json</exclude>
          </excludes>
        </resource>
      </resources>
    </build>
    
  • 第三步:确认测试classpath包含main资源输出目录
    若使用IDEA等IDE,打开项目结构(Project Structure)-> Modules -> 找到myProjectModule -> Dependencies标签页,确认main代码的编译输出目录已加入依赖,Scope设置为Test或Compile。
  • 临时验证方案:将testfile.json复制一份到src/test/resources目录下,重新构建后运行代码,若可以正常读取则说明是main资源未被加载到测试classpath的问题。

代码优化建议

原有代码需要将资源转成File读取,打包成jar包后会无法访问jar内部的资源文件,建议直接用输入流读取,适配所有运行场景:

try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("testfile.json")) {
    if (inputStream == null) {
        throw new IllegalArgumentException("classpath中未找到testfile.json,请检查资源配置");
    }
    final JsonNode root = mapper.readValue(inputStream, JsonNode.class);
} catch (IOException e) {
    e.printStackTrace();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:06:05