Spring Application Context не может загрузить файлы конфигурации - PullRequest
0 голосов
/ 17 октября 2011

У меня есть 2 проекта.Проект плагина, содержащий некоторые компоненты (POJO), и проект фрагмента, содержащий соответствующий модуль и интеграционные тесты.Я использую Tycho для создания этих проектов и хочу использовать Spring для начальной загрузки моих интеграционных тестов.

Я аннотировал свои тестовые классы с помощью

@ContextConfiguration(locations = { "classpath*:spring/*-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)

Но когда я пытаюсь построить проекты с помощью tycho (clean install) или запустить тестовый класс как Plugin-Test в eclipse,Spring жалуется, что в указанном контексте нет бобов.В журнале я нашел следующие строки:

DEBUG o.s.t.c.s.AbstractGenericContextLoader - Loading ApplicationContext for 
      locations [classpath*:spring/*-config.xml].
DEBUG o.s.b.f.xml.XmlBeanDefinitionReader - Loaded 0 bean definitions from 
      location pattern [classpath*:spring/*-config.xml]

Я поместил файлы конфигурации в src/main/java/spring/ и src/main/resources/spring, но Spring не может их найти.Я также пытался добавить эти пути в явном виде в путь к классам комплекта в манифесте.

Когда я изменяю путь конфигурации на "file:spring/some-config.xml", пружина загружает мои определения bean-компонентов, но вылетает при попытке загрузить "контекстная схема со следующим выводом:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema
namespace [http://www.springframework.org/schema/context]

Почему он не работает с префиксом classpath?И почему он работает с префиксом файла?Я думал, что префикс файла будет работать только для файловой системы, а не для файла JAR ... Что я делаю не так?

Заранее спасибо

Обновление: Вот полное представление (фрагмент) тестового проекта:

/
+-- src/main/java/
|   +-- MyTestClass.java
|
+-- src/main/resources/
|   +-- spring/
|   |   +-- some-config.xml
|   +-- log4j.properties
|
+-- META-INF/
|   +-- MANIFEST.MF
|
+-- pom.xml

После того, как Tycho попытался выполнить мой тестовый класс, я вижу следующие файлы под целью:

/target
|
+-- classes/
    +-- MyTestClass.class
    +-- spring/
        +-- some-config.xml
    +-- log4j.properties
+-- work/   // contains the eclipse configuration (config.ini, etc.)
+-- MANIFEST.MF
+-- mybundle-xx.jar

Я пропустил свойства и файлы для серфинга.Сгенерированный config.ini в target / work / configuration / выводит список всех пакетов, которые упомянуты в манифесте как обязательные пакеты.Они упоминаются как файлы jar, за исключением моего пакета тестовых фрагментов.Для тестового пакета существует следующая запись:

reference\:file\:C\:/[...]/workspaces/workspace/my.bundle.tests

Это правильно?По крайней мере, это объясняет, почему префикс файла работает ... Но как насчет префикса classpath?Был ли манифест скопирован в нужное место в целевой папке?Я имею в виду, что он находится вне папки classes, на которую ссылается dev.properties.
. Кроме того, log4j жалуется при запуске, что он неправильно настроен, что указывает на то, что он не может найти свойства log4j.properth в пути к классам.

Обновление: Сейчас я пытаюсь по-другому.Я прочитал эту статью , и мне показалось, что это более простой способ начать работу.Поэтому я добавил maven-surfire-plugin к своему pom и изменил тип упаковки с «eclipse-test-plugin» на «jar», чтобы tycho не запускал свой собственный surefire-плагин.Но сейчас я стою перед другой проблемой.Похоже, Spring предоставляет только ArtifactLocator для репозиториев maven2, а не для репозиториев p2, таких как tycho.
Кто-нибудь знает, существует ли там ArtifactLocator для репозиториев p2?

Кто-нибудь использует ту же настройку с tycho, osgi и spring для интеграционного тестирования?

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Положите spring-context-xx.jar на ваш путь к классу.

Пространства имен обрабатываются реализациями интерфейса NamespaceHandler. При запуске Spring загружает их все и пытается проанализировать каждое пространство имен с загруженными обработчиками. Если ни один из них не утверждает, что может его проанализировать, возникает исключение. Пространство имен context: анализируется ContextNamespaceHandler, который находится в вышеупомянутой банке.

0 голосов
/ 10 сентября 2014

Используя Tycho, в соответствии с http://blog.vogella.com/2010/07/06/reading-resources-from-plugin/ Я пробовал такие места, как:

"platform:/plugin/<host-bundle-id>/<path-to-resource>"

, и теперь он может загружать конфигурации контекста как ресурс.

...