2016-11-18 2 views
0

У меня возникли проблемы с получением 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.

ClassLoader cl = ClassLoader.getSystemClassLoader(); 
URL[] urls = ((URLClassLoader)cl).getURLs(); 
for(URL url: urls){System.out.println(url.getFile());} 

Один из этих банок имеют ресурсов папку, которая содержит мой файл «applicationContext.xml». Я открыл файл jar с 7-Zip, чтобы убедиться, что он есть.

Я добавил код, чтобы узнать, найдет ли этот загрузчик классов, который перечислял мои файлы 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

где вы положили свой applicationContext.xml? – kuhajeyan

+0

Какая IDE вы используете? –

+1

Если у вас есть папка 'resources', то ваш путь должен быть'/resources/applicationContext.xml', то, что у вас сейчас, будет загружать его из корня пути к классам. –

ответ

0

Ответ заключается в том, чтобы исправить относительный путь, чтобы включить папку, как предположил М. Дейн.

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

и отладки

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

Эта потребность не появится ни в одном из примеров, которые я нашел на линии, поэтому я понимаю, что эта структура является результатом использования по умолчанию в Eclipse, и Maven строя банки.

Спасибо всем за большие вопросы и предложения.