【问题标题】:Spring - applicationContext.xml cannot be opened because it does not existSpring - applicationContext.xml 无法打开,因为它不存在
【发布时间】:2011-04-23 21:32:36
【问题描述】:

我有一个 Spring MVC 应用程序和 JUnit 测试与文件 applicationContext.xml 结合的问题。

在我的 JUnit 测试类中我写:

final ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
service = (TestServiceImpl) context.getBean("testServiceImpl");

我得到的错误是找不到aplicationContect.xml:

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

但它存在于WEB-INF文件夹中。

那么,这里有什么问题?为什么 JUnit 测试的文件不存在?

【问题讨论】:

    标签: spring spring-mvc junit


    【解决方案1】:

    您应该将 Spring 文件保存在另一个文件夹中,标记为“source”(就像“src”或“resources”一样)。

    WEB-INF 不是源文件夹,因此它不会包含在类路径中(即 JUnit 不会在那里寻找任何东西)。

    【讨论】:

      【解决方案2】:

      如果你使用maven,在主目录中创建一个名为resources的目录,然后将你的applicationContext.xml复制进去。

      来自您的 java 代码调用:

      ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
      

      【讨论】:

      • 谢谢,我使用 maven 并将 applicationContext.xml 放入资源中立即解决了我的问题!
      • 非常感谢。此外,此处提到的其他解决方案均不适用于 IntelliJ 中的 maven 项目
      • 如何改变这种行为?
      • @duracell,非常感谢。我一直在不断地将我的 applicationContext.xml 重构到不同的位置,但没有任何效果。你的回答帮助了我
      【解决方案3】:

      我遇到了同样的错误。 我解决了它移动文件applicationContext.xmlin a

      src文件夹的子文件夹。例如:

      context = new ClassPathXmlApplicationContext("/com/ejemplo/dao/applicationContext.xml");
      

      【讨论】:

      • 在 src 中必须包含上述路径
      【解决方案4】:

      ClassPathXmlApplicationContext 不会在您的 WEB-INF 文件夹中找到 applicationContext.xml,它不在类路径中。在运行测试时,您可以将应用程序上下文复制到您的类路径中(可以将其放在 src/test/resources 下并让 Maven 将其复制过来)。

      【讨论】:

        【解决方案5】:

        我也发现了这个问题。解决这个问题的方法是将这个文件复制/粘贴到任何地方并运行,一次一个文件。最后编译运行成功,然后删除不需要的。在我的情况下正确的地方是:

        这是在 /src/ 路径下(我使用 Intellij Idea 作为 IDE)。其他java源文件在/src/com/package/路径下

        希望对你有帮助。

        【讨论】:

          【解决方案6】:

          我在使用 eclipse 时不时会发生这种情况 出于某种原因(eclipse 错误??)“排除”参数获取值 *.*(我的资源文件夹的构建路径)

          只需将排除项更改为无(参见红色矩形与绿色矩形) 我希望这对将来的某人有所帮助,因为找到它非常令人沮丧。

          【讨论】:

            【解决方案7】:

            单击src/main/java 文件夹并右键单击并创建xml 文件。如果在/ 以外的子包中创建application.xml 文件,它将不起作用。

            知道你的结构是这样的

            package/
            |  subpackage/
               | Abc.java
               | Test.java
            
            /application.xml
            

            【讨论】:

              【解决方案8】:

              enter image description here

              我为这个问题苦苦挣扎了几个小时,因为我将该文件放在资源文件夹下,但它没有帮助我,最后我意识到我的错误。 直接放到src/main/java下。

              【讨论】:

                【解决方案9】:

                我将 applicationContext.xml 放在 src/main/java 文件夹中,它工作了

                【讨论】:

                  【解决方案10】:

                  我解决了将文件 spring-context.xml 移动到 src 文件夹中的问题。 ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");

                  【讨论】:

                    【解决方案11】:

                    我通过将 applicationContext.xml 添加到 Maven 项目的 jar/target/test-classes 来修复它。并使用

                            XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                                    "/applicationContext.xml", getClass() ) )
                    

                    而不是

                            XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                                    "/WEB-INF/applicationContext.xml", getClass() ) )
                    

                    【讨论】:

                      【解决方案12】:

                      我的解决方案
                      如果您没有文件夹WEB-INF,请将文件applicationContext.xml 放入文件夹source(src)。


                      然后Java Project可以读取文件applicationContext.xml -> getBean -> 执行你的业务。

                      【讨论】:

                        【解决方案13】:

                        在 Spring 中,所有源文件都在 src/main/java 中。 同样,资源通常保存在 src/main/resources 中。 因此,请将您的 spring 配置文件保存在资源文件夹中。

                        确保在 src/main/resources 中也有文件的 ClassPath 条目。

                        在 .classpath 中检查以下 2 行。如果缺少它们,请添加它们。

                        <classpathentry path="src/main/java" kind="src"/>
                        <classpathentry path="src/main/resources" kind="src" />
                        

                        因此,如果您已准备好一切,下面的代码应该可以工作。

                        ApplicationContext ctx = new ClassPathXmlApplicationContext("Spring-Module.xml");

                        【讨论】:

                          【解决方案14】:

                          请执行此代码 - 它有效

                           AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
                          

                          o/w: 删除主方法类并在重新创建时重新创建它请取消选中继承的抽象方法它的工作

                          【讨论】:

                            【解决方案15】:

                            我正在使用 Netbeans,我通过将文件放入:Other Sources 默认包中解决了我的问题,然后我以这种方式调用它:

                            ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");

                            resources folder

                            【讨论】:

                              【解决方案16】:

                              在使用 Maven 时遇到了同样的问题,然后我将 XML 文件放入 src/main/java 路径并且它工作正常。

                              ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
                              

                              【讨论】:

                                【解决方案17】:

                                您实际上需要了解ApplicationContext。它是一个接口,它会根据配置有不同的实现。

                                当您使用 new ClassPathXmlApplicationContext("applicationContext.xml"); 时,请注意最初的右侧,它表示 ClassPathXmlApplicationContext ,因此 XML 必须存在于类路径中。 因此,将您的 applicationContext.xml 拖到 src 文件夹中。

                                要点:new ClassPathXmlApplicationContext 作为名称 [ClassPathXml] 将在您的 src 文件夹中查找 xml 文件 项目,所以只将你的 xml 文件拖到那里。

                                ClassPathXmlApplicationContext - 从 XML 加载上下文定义 位于类路径中的文件,将上下文定义文件视为类路径 资源。

                                FileSystemXmlApplicationContext—从 XML 加载上下文定义 文件系统中的文件。

                                XmlWebApplicationContext - 从包含的 XML 文件加载上下文定义 在 Web 应用程序中。

                                【讨论】:

                                  【解决方案18】:
                                  just change the containing package of your applicationContext.xml file.
                                   applicationContext.xml must be in src package not in your project package.
                                   e.g. 
                                       src(main package)
                                           com.yourPackageName(package within src)
                                           classes etc.
                                       applicationContext.xml(within src but outside of yourPackage or we can say 
                                                              parallel to yourPackage name)
                                  

                                  【讨论】:

                                    【解决方案19】:

                                    你的模块/src/applicationContext.xml

                                    val context = ClassPathXmlApplicationContext("applicationContext.xml")
                                    

                                    查看目录路径,默认路径是/src/而不是/

                                    GL

                                    【讨论】:

                                      【解决方案20】:

                                      我在处理 maven 项目时遇到了同样的问题,所以我在 src/main/java 中重新创建了配置文件 spring.xml,它对我有用。

                                      【讨论】:

                                        【解决方案21】:

                                        enter image description here解决办法是把xml文件放到resources文件夹(src->main->resources),用这个对象创建new ClassPathXmlApplicationContext("applicationContext.xml");

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 2016-09-08
                                          • 2019-07-12
                                          • 2021-12-14
                                          • 2016-12-01
                                          • 2015-11-30
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2017-02-19
                                          相关资源
                                          最近更新 更多