如何在类路径上指定资源

时间:2016-11-18 07:37:22

标签: java spring classpath

我无法让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?

1 个答案:

答案 0 :(得分:0)

答案是修正相对路径以包含文件夹为M. Deinum建议。

appContext = new ClassPathXmlApplicationContext("classpath:resources/applicationContext.xml");

并在调试中

URL appContextURL=cl.getResource("applicationContext.xml");

这个需求没有出现在我在网上找到的任何例子中,因此我认为这个结构是在构建jar时在Eclipse和Maven中使用默认值的结果。

感谢大家提出的重大问题和建议。