嵌套异常是 java.io.FileNotFoundException:类路径资源 [my-config.xml] 无法打开,因为它不存在

Posted

技术标签:

【中文标题】嵌套异常是 java.io.FileNotFoundException:类路径资源 [my-config.xml] 无法打开,因为它不存在【英文标题】:nested exception is java.io.FileNotFoundException: class path resource [my-config.xml] cannot be opened because it does not exist 【发布时间】:2022-01-24 03:52:22 【问题描述】:

我对 Java 比较陌生,正在尝试学习 Spring 框架。我有以下代码

public class EmployeeTest 
    public static void main(String ...args) 
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("my-config.xml");
        Employee employee = (Employee) ctx.getBean("emp");
        System.out.println(employee.getId());
        System.out.println(employee.getName());

    

my-config.xml 位于EmployeeTest 类本身所在的位置。但是,当我运行此代码时,出现以下异常:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [my-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [my-config.xml] cannot be opened because it does not exist

按照一些文章的建议,我尝试将 my-config.xml 放在 src/main/java 下,但还是没有成功

我正在使用 IntelliJ Idea 作为编辑器。 非常感谢任何提示

【问题讨论】:

如果你试图通过类路径访问配置文件,它需要在src/main/resources 【参考方案1】:

如果你使用Maven构建你的应用程序,你应该把my-config.xml文件放到src/main/resources目录

【讨论】:

好的,谢谢!!!成功了【参考方案2】:

好的,我找到了解决方案。所以我在src/main 下创建了一个resources 目录并将我的my-config.xml 放在那里。开始工作后

【讨论】:

【参考方案3】:

您正在使用 Spring 的 ClassPathXmlApplicationContext 类。正如类名所暗示的那样(javadoc 表示)这会从应用程序类路径加载其配置文件。

但是src/main/java 树的内容不在类路径中。将文件放入src/main/resources ... 这将(通常)直接添加到类路径中,或者添加到 Maven / Gradle / 您的 IDE 生成的 JAR 或 WAR 文件中。

另见:

Maven: Introduction to the standard directory layout。

我尝试按照一些文章的建议将my-config.xml 放在src/main/java 下,但仍然没有成功。

是的……不。除非您做其他(可能是不可取的)事情,否则src/main/java 中的文件不在类路径中,ClassPathXmlApplicationContext 不会找到。

如果那些文章真的建议将其作为 this 上下文的解决方案,那么它们就是完全错误的。如果您使用的是FileSystemXmlApplicationContext,那么这种方法可以工作......但是使用相对路径名很脆弱(这取决于应用程序的工作目录是什么),并且当您在生产中部署应用程序时,引用源代码树的路径名通常不起作用。

【讨论】:

以上是关于嵌套异常是 java.io.FileNotFoundException:类路径资源 [my-config.xml] 无法打开,因为它不存在的主要内容,如果未能解决你的问题,请参考以下文章

工厂方法“dataSource”抛出异常;嵌套异常是 javax.naming.NameNotFoundException

小程序为什么显示嵌套异常

Java多层嵌套异常处理的基本流程

无法提交 Hibernate 事务;嵌套异常是 org.hibernate.Transaction 异常:JDBC 提交失败

导致堆栈溢出异常的嵌套 JSF 复合组件

嵌套事务 DbContext SaveChanges 引发异常