Spring ContextLoader не может найти applicationContext.xml - PullRequest
2 голосов
/ 03 февраля 2010

Я долгое время работал над проектом один, и теперь к нему присоединился другой разработчик, поэтому я хотел настроить проект на его машине из SVN. Мы оба используем очень похожие настройки:

  • OS X Snow Leopard
  • Последняя версия Eclipse WTP
  • m2eclipse Maven Plugin
  • Подрывной плагин SVN
  • Tomcat 6.0.24

Используемая версия Spring - 2.5.6.

Я настроил проект на его машине с помощью инструмента Eclipse «Project from SVN», по сути создав копию проекта 1: 1. Maven позаботился обо всех зависимостях без проблем, насколько я могу судить, проект скомпилирован без проблем. Структура проекта соответствует стандарту Maven для веб-приложений с ресурсами (например, applicationContext.xml) в src / main / resources, кодом проекта в src / main / java и всеми файлами, связанными с веб-приложениями, в src / main / webapp и src / main / webapp / WEB-INF соответственно.

Файл web.xml настроен для загрузки контекста следующим образом:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Используя инструмент Eclipse «Серверы», я попытался запустить приложение прямо из Eclipse, но оно сразу же завершилось неудачей с FileNotFoundException при попытке загрузить applicationContext.xml.

Поскольку код, извлеченный из SVN, остался нетронутым, я думаю, что проблема связана с каким-то параметром для плагина Maven. Или что я забыл какой-то важный шаг для завершения настройки. Кто-нибудь сталкивался с подобной проблемой или у меня есть идея, где мне начать искать?

Большое спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Структура проекта соответствует стандарту Maven для веб-приложений с ресурсами (например, applicationContext.xml) в src / main / resources, кодом проекта в src / main / java и всеми файлами, связанными с веб-приложениями, в src / main / webapp и src / main / webapp / WEB-INF соответственно.

Это правильно и совершенно нормально (если вы хотите, чтобы applicationContext.xml находился в пути класса тестов).

Он не копируется в WEB-INF / классы, но это не так в моем (работающем) проекте. Вместо этого файл копируется в target / classes согласно стандарту Maven.

Он копируется в target/yourapp/WEB-INF/classes, но не в process-resources, который вызывается по умолчанию m2eclipse при изменении ресурса (эта цель копирует / фильтрует ресурсы в target/classes). Это происходит во время фазы package (или при явном вызове war:war, war:inplace или war:exploded). Как объяснено на странице использование , плагин WAR не несет ответственности за компиляцию исходных кодов Java или копирование ресурсов .

Поэтому я бы предложил package войну, прежде чем запускать ее на сервере. Возможно, вы сможете настроить m2eclipse для этого автоматически при изменении ресурсов ( щелкните правой кнопкой мыши в вашем проекте, затем выберите Свойства> Maven и добавьте соответствующую цель war к Цели для вызова при изменении ресурса ). Хотя не пробовал.

1 голос
/ 03 февраля 2010

При запуске приложения с плагином серверы ожидает, что ваша веб-папка содержит все необходимое. Вот почему вы должны настроить выходную папку вашего проекта (из параметров пути сборки проекта) на src/main/webapp/WEB-INF/classes

В качестве альтернативы вы можете использовать плагин FileSync для копирования файлов.

Кстати, вы не указали, какие параметры есть у плагина «Серверы», и является ли ваш проект «Динамическим веб-проектом» (т.е. развертываемым) или нет.

...