Генерируйте описания метатипов с помощью аннотаций 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, так как они не описывают конфигурации.