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

Spring项目已配置依赖与配置文件,运行时抛出FileNotFoundException

解决Spring中FileNotFoundException加载Beans.xml的问题

从你的代码和项目结构来看,问题出在配置文件的位置和Spring加载资源的方式不匹配,我来一步步帮你分析和解决:

问题根源

  1. 先看你的测试代码:
    File f = new File("Beans.xml"); 
    System.out.println("Exist test: " + f.exists()); 
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    
    • new File("Beans.xml")是从当前程序运行的工作目录查找文件,和Spring类路径的查找逻辑完全不同,所以exists()返回false是正常的,但这不是核心问题。
    • 真正的问题是:你把Beans.xml放在了src/main/java目录下,而Maven/Gradle这类主流构建工具默认只会将src/main/resources目录下的资源文件(比如xml、properties)打包到项目的类路径中,src/main/java仅负责编译.java文件,不会将xml这类非源码文件复制到编译后的类路径目录(比如target/classes),所以ClassPathXmlApplicationContext在类路径里找不到这个文件,才抛出FileNotFoundException。

解决方案

方案1:移动配置文件到标准资源目录(推荐)

这是Spring项目的标准实践,简单可靠:

  • 将Beans.xml从src/main/java目录移动到src/main/resources目录下
  • 不需要修改任何代码,new ClassPathXmlApplicationContext("Beans.xml")就能正常加载,因为构建工具会自动把src/main/resources下的文件打包到类路径根目录。

方案2:修改构建工具配置,让src/main/java下的xml文件被打包

如果不想移动文件,可以修改Maven/Gradle配置,让它把src/main/java下的xml文件也加入类路径:

Maven配置(在pom.xml中添加):

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <!-- 别忘了保留默认的resources目录配置,避免其他资源无法加载 -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

修改后执行mvn clean package,构建工具就会把src/main/java下的xml文件复制到target/classes目录,Spring就能正常加载了。

额外提示

  • 尽量避免使用绝对路径加载配置文件,因为项目打包部署后,绝对路径会失效,类路径加载的方式更适合Spring项目的可移植性。
  • 你也可以直接查看编译后的target/classes目录,确认Beans.xml是否存在,这是快速排查类路径资源问题的有效方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:40