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

Joe*_*Joe 5 java xml spring javabeans

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

ApplicationContext context = 
      new ClassPathXmlApplicationContext("com/main/beans.xml");
Run Code Online (Sandbox Code Playgroud)

我之前尝试过

ApplicationContext context = 
     new FileSystemXmlApplicationContext("src/main/java/com/main/beans.xml");
Run Code Online (Sandbox Code Playgroud)

它运作良好.

如何相对于classpath做到这一点?

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


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

项目结构

项目结构

类路径

类路径

ApplicationContext context = 
    new ClassPathXmlApplicationContext("com/caveofprogramming/spring/test/beans/beans.xml");
Run Code Online (Sandbox Code Playgroud)

Pau*_*tha 6

这是我通常使用的文件结构,工作正常.正如@ 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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


UPDATE

把包裹bean.xml放入src/main/resources.它应该适用于您使用的路径.


更新2

"是的,它确实有效.但为什么它正在运行这个例子,我也在关注.如果beans.xml超出了src/main/resources ..我无法找到它是如何工作的?*

问题是,Spring容器将从类根看起来.它与resources文件夹无关.resources对于maven项目来说,这是一个方便的目录,可以构建到您的类路径.本教程工作的原因是,beans.xml它位于一个包中,它将被放入构建中的类路径中,如下所示.它只是首选使用a resources,但是package`也将构建到类路径.

在此输入图像描述 在此输入图像描述