У меня есть несколько пакетов OSGi, которые встроены в Eclipse с использованием обычных зависимостей, управляемых манифестом, и внешних сборок с помощью Maven Tycho.
Запуск пакетов внутри Eclipse на Equinox работает нормально. Создание их с помощью Tycho отлично работает.
Теперь я хочу использовать Tycho Surefire для запуска интеграционных тестов, и для этого я создал простой тестовый пакет, содержащий несколько базовых тестов. Тестируемые пакеты полагаются на некоторые другие пакеты, присутствующие в OSGi-контейнере, и некоторые незначительные настройки уровня запуска для правильной работы - как я уже сказал, сами пакеты прекрасно запускаются при обычном запуске на Equinox.
Итак, чтобы имитировать это для Tycho Surefire, я указал следующее в pom.xml тестового пакета:
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<bundleStartLevel>
<bundle>
<id>org.hibernate.osgi</id>
<level>6</level>
<autoStart>true</autoStart>
</bundle>
<!-- plus a few more bundles in the real pom.xml -->
</bundleStartLevel>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-plugin</type>
<id>org.hibernate.entitymanager</id>
<versionRange>4.2.12.Final</versionRange>
</requirement>
<requirement>
<type>eclipse-plugin</type>
<id>org.hibernate.osgi</id>
<versionRange>4.2.12.Final</versionRange>
</requirement>
<!-- plus a few more bundles in the real pom.xml -->
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin>
</plugins>
</build>
Интересно, что тесты провалились. После некоторых исследований я узнал, как я могу получить доступ к консоли OSGi во время/после неудачного запуска теста для дальнейшего изучения проблемы (консоль OSGi после запуска тестов tycho).
Мои выводы таковы, что хотя все необходимые пакеты (все транзитивно производные пакеты и все указанные вручную) присутствуют в OSGi-контейнере, были запущены только те, у которых есть характерный <bundleStartLevel>
(плюс, конечно, OSGi-core-bundles).
Итак, учитывая приведенный выше пример, я пришел к выводу, что, хотя и org.hibernate.osgi
, и org.hibernate.entitymanager
были разрешены, только первый находится в состоянии «АКТИВНО». Это явно портит весь запуск, и я предполагаю, что тесты будут работать нормально, если пакеты запустятся, как ожидалось.
Когда я смотрю на «нормальную» конфигурацию Eclipse-OSGi-Launch, есть параметр «Автозапуск по умолчанию», для которого по умолчанию установлено значение true. Я не нашел ничего подобного в документации Tycho Surefire, но возможно ли, что установка определенного уровня запуска для некоторых пакетов каким-то образом переопределяет автоматический запуск других пакетов? По крайней мере, я бы не догадался, что Tycho вообще не запускает автоматически какие-либо пакеты по умолчанию...
Я был бы признателен за любые подсказки о том, как исследовать эту проблему дальше, или любые подсказки о том, как я могу заставить Tycho запускать свои пакеты без необходимости указывать отдельный начальный уровень для каждого.