У меня есть 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 для интеграционного тестирования?