Spring внутри войны не удается найти ресурс classpath во внутреннем файле jar

У меня есть проект, организованный следующим образом:

core
  -- /src/main/resources/company/config/spring-config.xml
webapp
  -- /WEB-INF/applicationContext.xml

Webapp зависит от core.jar, который правильно включен в WEB-INF/lib при развертывании.

В web.xml у меня есть:

<param-value>
    /WEB-INF/applicationContext.xml
</param-value>

И в applicationContext.xml у меня есть:

<import resource="classpath:/company/config/spring-config.xml" />

Но когда я бегу, я получаю эту ошибку:

2012-10-04 20:03:39,156 [localhost-startStop-1] springframework.web.context.ContextLoader ERROR: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:/company/config/spring-config.xml]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [company/config/spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
....
Caused by: java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:142)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
... 36 more

Когда spring-config.xml находится в webapp, все работает нормально.

Я заметил, что ведущий / удаляется из некоторых ошибок в трассировке стека, и мне интересно, имеет ли это к этому какое-то отношение.

Кроме того, я (к сожалению), используя Spring 2.5, если это имеет значение.

Ответ 1

В будущем для справки я выяснил проблему после большой отладки. Оказывается, Eclipse строит мою "основную" библиотеку как банку, но с макетом веб-приложения, поэтому вместо моего ресурса, находящегося здесь:

/company/config/spring-config.xml

он находился здесь:

/WEB-INF/company/config/spring-config.xml

что вызвало проблему. Я несколько раз проверял банку, но никогда не замечал скрытую "/WEB-INF", скрывающуюся на виду.

Удаление проекта и повторное импортирование его в Eclipse (через файл Maven pom.xml) было недостаточным для устранения проблемы.

Мне пришлось вручную удалить файлы .project,.classpath и .settings для Eclipse. Когда я это сделал и повторно импортировал проект, все было исправлено.

Мораль урока: ВСЕГДА проверяйте пути к ресурсам, когда исключение говорит "Файл не найден".