Spring Boot通过ClassPathResource获取不到Resource下目录文件问题排查

1,339 阅读1分钟

一、问题

如代码示例:获取Resource目录下static/playctrl_map_code.xlsx文件,获取文件流失败。

Untitled.png

二、分析

  1. 在第二个分支处,classPathRecource.exists()返回了false
  2. 打断点跟进去可以看到在此处返回了Null

Snipaste_2021-06-29_10-25-45.png

  1. IDEA按Alt+F8调用计算,尝试使用当前启动类的类加载器加载static/playctrl_map_code.xlsx,仍然返回null。
ZhjkServerApplication.class.getClassLoader().getResource("static/playctrl_map_code.xlsx")
  1. 尝试获取配置文件application.properties
ZhjkServerApplication.class.getClassLoader().getResource("application.properties")

Snipaste_2021-06-29_10-35-28.png

  1. 可以看到获取配置文件成功,且获取的文件的路径是编译后的目录Target下

  2. 检查编译后的target目录,缺失了static路径,定位到问题原因:编译出现异常

Snipaste_2021-06-29_10-36-13.png

三、解决

问题原因已经找到,是编译问题,那么首先我尝试IDEA重新编译,但很显然不会成功。

  1. 检查Pom.xml文件,发现resource默认配置被覆盖,而且缺失static目录的配置

Untitled (1).png

  1. 由于之前已经放弃了使用filtering标签,Resources配置的意义已经不大,直接删除,重新编译

  2. 如果IDEA编译失败,建议使用Maven手动编译,clean清除target,install安装本地jar到本地仓库,compile编译。

mvn clean install compile
  1. 查看重新编译后的target,已经正常,重新运行,问题解决

Untitled (2).png