src/main/resources存在文件仍报java.io.FileNotFoundException求助
解决Spring中ClassPathResource找不到src/main/resources下文件的问题
我来帮你排查这个java.io.FileNotFoundException: class path resource异常——明明文件放在src/main/resources目录下,Spring却找不到,大概率是这几个常见原因,对应解决办法如下:
路径拼写错误(最常见)
Spring的ClassPathResource默认从类路径根目录查找资源,而src/main/resources下的文件编译后会直接放到类路径根(比如target/classes)。要注意:- 不要加开头的斜杠,比如文件是
config.xml,正确写法是new ClassPathResource("config.xml"),而不是new ClassPathResource("/config.xml") - 如果文件在子目录,比如
src/main/resources/xml/data.xml,路径要写成xml/data.xml - 大小写敏感!比如实际文件是
Data.xml,代码里写data.xml就会找不到
示例正确代码:
ClassPathResource xmlResource = new ClassPathResource("your-target-file.xml");- 不要加开头的斜杠,比如文件是
编译后文件未被复制到类路径
Maven/Gradle默认会把src/main/resources下的资源复制到target/classes(类路径目录),但如果你的XML文件被构建配置排除了,或者文件名拼写错误,就不会被复制。你可以直接去项目的target/classes目录下检查:- 如果找不到你的XML文件,检查Maven的
pom.xml里有没有<resources>配置把它排除了 - 核对文件名和代码里的路径是否完全一致(包括大小写)
- 如果找不到你的XML文件,检查Maven的
类加载器环境问题
在多模块项目或者特殊类加载场景下,默认的类加载器可能找不到资源。这时可以指定当前类的类加载器来加载:// 把YourCurrentClass换成你当前写这段代码的类名 ClassPathResource resource = new ClassPathResource("your-file.xml", YourCurrentClass.class.getClassLoader());针对XsltPayloadTransformer的特殊检查
你代码里用到了XsltPayloadTransformer,初始化这个转换器时,要确保传入的ClassPathResource路径正确。比如:XsltPayloadTransformer transformer = new XsltPayloadTransformer(new ClassPathResource("your-xslt-file.xsl"));同样要确认这个XSLT文件在编译后的类路径中存在。
先按这个顺序排查,一般就能解决问题啦!
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

