我无法让Spring从我的类路径中读取applicationContext.xml文件。
appContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
和
appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
导致以下错误。
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource
[applicationContext.xml] cannot be opened because it does not exist
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
以下代码正确列出了我的类路径中的所有jar文件,包括带有applicationContext文件的jar文件。
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){System.out.println(url.getFile());}
其中一个罐子有一个 resources 文件夹,其中包含我的" applicationContext.xml"文件。我用7-Zip打开了jar文件,以确保它在那里。
我添加了一些代码,试图查看列出我的jar文件的类加载器是否可以找到它。
URL appContextURL=cl.getResource("applicationContext.xml");
if(appContextLocation==null){
logger.info("context not found in classpath");
}else{
logger.info("Application context found at " + appContextLocation);
}
这也找不到。
我需要做些什么才能确保找到applicationContext.xml?
答案 0 :(得分:0)
答案是修正相对路径以包含文件夹为M. Deinum建议。
appContext = new ClassPathXmlApplicationContext("classpath:resources/applicationContext.xml");
并在调试中
URL appContextURL=cl.getResource("applicationContext.xml");
这个需求没有出现在我在网上找到的任何例子中,因此我认为这个结构是在构建jar时在Eclipse和Maven中使用默认值的结果。
感谢大家提出的重大问题和建议。