Генерируйте описания метатипов с помощью аннотаций maven-scr-plugin и OSGI R6

Я использую maven-scr-plugin для генерации описания компонентов и метатипов. Я мигрирую из аннотаций org.apache.felix.scr в аннотации org.osgi.service.component.

Карстен Цигелер написал отличный блог о том, как сделать эту миграцию здесь. Однако это не объясняет, как получить описания метатипов, напрямую генерируемые из аннотаций компонентов. Вместо этого мне пришлось бы создать отдельную конфигурацию @interface для каждого компонента и переписать все активаторы компонентов (по крайней мере, чтобы использовать добавленную стоимость этих дополнительных классов @interface).

Я все еще могу использовать maven-scr-plugin для обработки аннотаций osgi, добавив зависимость от org.apache.felix.scr.ds-annotations, Однако maven-scr-plugin выводит информацию о метатипах только в том случае, если она явно включена. С аннотациями Феликса, выделенным параметром metatype=true в @Component аннотация доступна для включения генерации метатипа. Однако такой параметр недоступен в версии OSGi @Component аннотаций.

Есть ли способ заставить maven-scr-plugin генерировать описания метатипа, или я могу сделать maven-bundle-plugin (или bndtools) для генерации данных метатипа на основе аннотации osgi @Component, вместо того, чтобы определять выделенный класс конфигурации для каждого компонента?

2 ответа

Решение

Метатип создается при использовании @Designate аннотаций. (По крайней мере, в реализации bnd.)

 @Designate( ocd=Config.class, factory=true )
 @Component
 public class SomeComponent {
    @ObjectClassDefinition
    @interface Config {
       int port();
    }
    @Activate
    void activate( Config config) { }
 }

Насколько я знаю, вам нужна отдельная конфигурация @interface для каждого компонента. Также невозможно создать метатип из аннотаций @Component, так как они не описывают конфигурации.

Другие вопросы по тегам