Я знакомлюсь с Spring OSGI и Blueprint, но у меня трудности с "classpath" (как и у многих новичков).
У меня есть два пакета OSGI - один, который определяет различные компоненты (используя Blueprint, а не то, что это должно иметь значение) и экспортирует их как сервисы; и другой пакет, который ссылается на служебные бины (используя Spring OSGI) и включает их в некоторые маршруты Apache Camel.
Blueprint пакета поставщика услуг выглядит примерно так:
<service id="camelTsvDataFormat"
interface="org.apache.camel.spi.DataFormat">
<bean class="org.apache.camel.component.flatpack.FlatpackDataFormat"/>
</service>
Контекст Spring комплекта услуг-потребителей выглядит примерно так:
<osgi:reference id="tsvDataFormat"
interface="org.apache.camel.spi.DataFormat" />
<camel:camelContext>
<route>
<from uri="vm:in">
<setBody>
<constant>SELECT * FROM myTable</constant>
</setBody>
<to uri="jdbc:myDataSource" />
<marshal ref="tsvDataFormat" />
<to uri="file:/path/to/my/files/?fileName=out.tsv" />
</route>
</camel:camelContext>
… Но при развертывании Spring «Не удается найти класс [org.apache.camel.spi.DataFormat]». Я могу добавить интерфейс в раздел Import-Package моих инструкций Bnd, но кажется излишним, чтобы вручную дважды перечислять класс в разных местах.
Альтернативный вариант - расширить интерфейс в моем собственном проекте, чтобы Bnd автоматически его поднял, но это примерно такая же проблема.
Полагаю, я ожидаю, что Spring выполнит поиск сервисов по имени интерфейса без фактического разрешения класса интерфейса. Это наивно? Или есть способ, позволяющий Bnd автоматически импортировать интерфейсы в ссылках на сервис моего appContext? Если Bnd может сделать это (например, с помощью плагинов), существует ли стандартный способ использования плагинов Bnd с комплектом плагинов Apache Felix для Maven?