2016-11-23 5 views
0

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

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

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

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

ответ

1

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

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

Да, я понял, и это работает без проблем. Однако, чтобы сделать это правильно, мне также пришлось бы изменить все активаторы, как показано в вашем примере (я знаю, что это можно сделать без, но это оставляет много неиспользуемых шаблонов в моих классах). Могу ли я увидеть ваш ответ в качестве подтверждения того, что bnd не поддерживает подход, который я ищу? Тогда я могу исключить этот путь решения, оставив только maven-scr-плагин в качестве возможного решения. –

+0

Вышеприведенный код показывает, какой OSGi стандартизован ... –

0

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

+0

@Component аннотации имеют 'property' параметр, в котором определяется все основные информации для параметров конфигурации (имя, значение по умолчанию, тип объекта). Конечно, дополнительную информацию, такую ​​как предельные диапазоны и описательные описания, не могут быть добавлены, но мне не нужны они в моем случае –

+0

Я не думаю, что свойства @Component учитываются при создании мета-типа, но я могу ошибаться. Может, Питер ответит на это. –

+0

Это не так. Метатип xml генерируется из аннотированных типов ObjectClassDefinition. Он не генерируется из элементов свойств аннотаций Компонента. –