首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring在bean xml配置文件存在时找不到它

Spring在bean xml配置文件存在时找不到它
EN

Stack Overflow用户
提问于 2012-10-15 18:32:32
回答 17查看 249.9K关注 0票数 81

我正在尝试在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在类路径中。怎么了?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 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并查看其目录结构的内容来验证它。

我建议阅读有关类路径的文章作为补充。

票数 176
EN

Stack Overflow用户

发布于 2015-03-13 08:16:13

我也有类似的问题,但由于原因有点不同,所以在这里分享一下,以防对任何人都有帮助。

我的文件位置

我是如何使用

ClassPathXmlApplicationContext("beans.xml");

有两种解决方案

在使用时,

  1. 将beans.xml从包中取出,并输入默认的

包名称,即

ClassPathXmlApplicationContext("com/mypackage/beans.xml");

票数 21
EN

Stack Overflow用户

发布于 2017-02-22 07:09:49

src/main/resources是一个源目录,您不应该直接引用它。当您构建/打包项目时,内容将被复制到您的类路径的正确位置。然后,您应该像这样加载它

new ClassPathXmlApplicationContext("beans.xml")

或者像这样

new GenericXmlApplicationContext("classpath:beans.xml");
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12893760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档