无法打开beans.xml(配置文件)因为不存在

时间:2014-01-31 11:46:43

标签: java xml spring javabeans

  

线程“main”中的异常   org.springframework.beans.factory.BeanDefinitionStoreException:   IOException从类路径资源解析XML文档   [COM /主/ 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");

效果很好。

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

注意:类路径位于构建路径


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

项目结构

Project structure

类路径

Classpath

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

1 个答案:

答案 0 :(得分:6)

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

enter image description here

执行上述操作时,

资源会被复制到类包中

enter image description here

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位于中,它将被放入构建中的类路径中,如下所示。使用resources只是首选,但包`也将构建到类路径。

enter image description here enter image description here