我正在尝试在Spring中创建我的第一个bean,但在加载上下文时遇到了问题。我在src/main/resources中有一个bean的配置XML文件。
我收到以下IOException:
线程"main“org.springframework.beans.factory.BeanDefinitionStoreException:在解析来自类路径资源src/
/ IOException /beans.xml的XML文档时出现异常;嵌套异常为
java.io.FileNotFoundException:无法打开类路径资源src/main/resources/beans.xml,因为它不存在
但是我不明白,因为我做了下面的代码测试:
File f = new File("src/main/resources/beans.xml");
System.out.println("Exist test: " + f.exists());
这就是事实!resources
在类路径中。怎么了?
发布于 2012-10-18 22:48:30
谢谢,但这不是解决办法。我发现了为什么它对我不起作用。
因为我已经做了一个声明:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
当beans.xml文件在那里时,我想我应该引用项目的根目录。然后,我将配置文件放到src/main/resources,并将初始化更改为:
ApplicationContext context = new ClassPathXmlApplicationContext("src/main/resources/beans.xml");
这仍然是一个IO例外。
然后该文件保留在src/main/resources/中,但我将声明更改为:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
它解决了问题--也许它会对某些人有帮助。
谢谢和干杯!
编辑:
由于我得到了许多人对这个解决方案的赞许,并且在几年前作为学生就已经有了第一次使用Spring的经验,所以我想简短地解释一下为什么它是有效的。
在编译和打包项目时,项目中“src/main/java”中的所有文件和子目录都会转到打包的jar (我们要创建的工件)的根目录中。同样的规则也适用于'src/main/resources‘。
这是许多工具,如maven或sbt在构建项目过程中遵守的约定(注意:作为默认配置!)。当代码(来自post)处于运行模式时,它找不到类似于"src/main/resources /beans.xml“的任何内容,因为beans.xml位于jar的根目录中(复制到创建的jar/ear/war中的/beans.xml中)。
在使用ClassPathXmlApplicationContext时,beans定义的正确位置声明是"/beans.xml",因为这是它在jar中所属的路径,随后是类路径中的路径。
可以通过使用归档程序(即rar)解压jar并查看其目录结构的内容来验证它。
我建议阅读有关类路径的文章作为补充。
发布于 2015-03-13 08:16:13
我也有类似的问题,但由于原因有点不同,所以在这里分享一下,以防对任何人都有帮助。
我的文件位置
我是如何使用的
ClassPathXmlApplicationContext("beans.xml");
有两种解决方案
在使用时,
包名称,即
ClassPathXmlApplicationContext("com/mypackage/beans.xml");
发布于 2017-02-22 07:09:49
src/main/resources
是一个源目录,您不应该直接引用它。当您构建/打包项目时,内容将被复制到您的类路径的正确位置。然后,您应该像这样加载它
new ClassPathXmlApplicationContext("beans.xml")
或者像这样
new GenericXmlApplicationContext("classpath:beans.xml");
https://stackoverflow.com/questions/12893760
复制相似问题