【问题标题】:Can not open beans.xml (config file) because does not exist无法打开 beans.xml(配置文件),因为不存在
【发布时间】:2014-02-24 02:29:56
【问题描述】:

线程“main”中的异常 org.springframework.beans.factory.BeanDefinitionStoreException: IOException 从类路径资源解析 XML 文档 [com/main/beans.xml];嵌套异常是 java.io.FileNotFoundException:类路径资源 [com/main/beans.xml] 无法打开,因为它不存在

ApplicationContext context = 
      new ClassPathXmlApplicationContext("com/main/beans.xml");

我之前试过

ApplicationContext context = 
     new FileSystemXmlApplicationContext("src/main/java/com/main/beans.xml");

而且效果很好。

相对于类路径如何做到这一点?

注意:类路径在构建路径中


在我下面的示例中,它具有以下结构并且可以正常工作

项目结构

类路径

ApplicationContext context = 
    new ClassPathXmlApplicationContext("com/caveofprogramming/spring/test/beans/beans.xml");

【问题讨论】:

  • xml 文件应该在 src/main/resources 中,而不是在 java 中。使用 maven 编译时,如果 xml 文件不在资源中,则它们将被忽略(除非您做一些额外的工作将它们添加回来)。
  • 在下面查看我的更新
  • @M.Deinum 谢谢——很有用!但是为什么它在示例中起作用?看来作者没有做额外的工作
  • 它可能在 Eclipse 中工作(因为这在计算类路径时很糟糕,尤其是对于 Maven 项目),在构建 jar/war 时它不会在那个位置。
  • 将 beans.xml 保存在类路径或保存 java 文件的 src/main/...pkg 中。然后使用 ClassPathXmlApplicationCONtext

标签: java xml spring javabeans


【解决方案1】:

这是我通常使用的文件结构,效果很好。正如@M.Deinum 所说,您需要将您的xml 文件放在src/main/resources 中。我通常将它与资源放在一个完整的包路径中,因此在编译期间,maven 会将所有资源添加到与使用它们的相应类相同的路径中。

当您执行上述操作时,资源会被复制到类包中

public class App {

    public static void main(String[] args) {
        ApplicationContext context
                = new ClassPathXmlApplicationContext("com/underdogdevs/stackmaven/beans.xml");

        Hello hello = (Hello) context.getBean("hello");
        hello.sayHello();
    }
}

对我来说很好用。如果您想知道为什么当xml已经在同一个类包中时仍然需要使用完整的包名,它会首先在类根中搜索


更新

将带有bean.xml 的包放入src/main/resources。它应该适用于您使用的路径。


更新 2

“是的,它有效。但是为什么它在这个例子中有效,我也在关注。如果 beans.xml 不在 src/main/resources .. 我不知道它是如何工作的?*

问题是,Spring 容器将从类根中查找。它与resources 文件夹无关。 resources 是 maven 项目构建到您的类路径的便利目录。本教程有效的原因是,beans.xml 位于 package 中,它将被放入构建中的类路径中,如下所示。仅首选使用resources,但package`也会构建到类路径。

【讨论】:

  • 是的,它奏效了。但是为什么它在这个例子中起作用,我也在关注。如果 beans.xml 不在 src/main/resources 173.248.174.172/~caveofpr/wp-content/uploads/2013/10/… 我不知道它是如何工作的?
  • 查看我的更新 2. 希望能澄清事情。
  • 是的,帮我解决这个问题。我还说在构建路径中我有 *.java 而不是全部,示例有。
  • 现在我尝试运行但又出现了另一个问题,eclipse 现在告诉我“选择没有主类型”。我的 Eclipse 项目是否已损坏?
  • here。这可能是几件不同的事情。还要确保使用 main 方法的类是主类。您可以对运行配置进行查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2016-09-08
  • 2019-07-12
  • 2012-02-16
相关资源
最近更新 更多