Spring 找不到 bean xml 配置文件

新手上路,请多包涵

我正在尝试在 Spring 中制作我的第一个 bean,但在加载上下文时遇到了问题。我在 src/main/resources 中有一个 bean 的配置 XML 文件。

我收到以下 IOException:

线程“main”中的异常 org.springframework.beans.factory.BeanDefinitionStoreException:IOException 从类路径资源 [src/main/resources/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 在类路径中。怎么了?

原文由 dawrutowicz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

谢谢,但这不是解决方案。我发现它为什么不适合我。

因为我做了一个声明:

 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)所遵循的约定(注意:作为默认配置!)。当代码(来自帖子)处于运行模式时,它找不到像“src/main/resources/beans.xml”这样的东西,因为 beans.xml 在 jar 的根目录中(复制到 /beans .xml 在创建的 jar/ear/war 中)。

使用 ClassPathXmlApplicationContext 时,bean xml 定义的正确位置声明在这种情况下是“/beans.xml”,因为这是它属于 jar 的路径,后来属于类路径。

可以通过使用归档程序(即 rar)解压缩 jar 并查看其目录结构的内容来验证它。

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

原文由 dawrutowicz 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这个:

new ClassPathXmlApplicationContext("file:src/main/resources/beans.xml");

file: 前缀指向文件系统资源,而不是类路径。

文件路径可以是相对路径或系统路径(/home/user/Work/src…)

原文由 Mikhail Kolesnikov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题