Usando anotações de scr em um projeto pax-construct com maven-bundle-plugin

Quando você inicia um novo projeto osgi e deseja ser realmente independente do IDE, você terá dificuldade em reunir as informações necessárias atualmente. Aqui está como eu descobri isso:

Quando você criou o projeto por pax-construct e criou o módulo bundle com bundle-create, você acabará com uma configuração pronta para usar para BundleActivators como os blocos de construção da estrutura do bundle. Mas e quanto ao SCR?
Eu queria aproveitar a capacidade de usar as anotações correspondentes de org.apache.felix.scr. Precisamos depender deles no projeto e depois usá-los para a configuração geral ao entrar na fase de pacote.

Primeiro, vamos definir a configuração geral de compilação dos submódulos de poms / compiled / pom.xml. Adicione o plugin exatamente onde o maven-bundle-plugin já está:

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version><timeofwriting:1.8.0></version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>

Então, você está basicamente configurado para permitir que o plug-in scr gere os arquivos OSGI.INF necessários para cada um de seus subprojetos. Mas sem dizer ao maven-bundle-plugin para usar essas informações e conectá-las, não veremos nada. E essa é a parte que foi difícil de definir. Você precisa dizer a ele para fazer isso. No mesmo arquivo, em poms / compiled / pom.xml, olhe as instruções para maven-bundle-plugin e adicione logo abaixo da instrução <_include>:

<Service-Component>
OSGI-INF/serviceComponents.xml

</Service-Component>

Agora dependa das anotações nos subprojetos para usá-los:

<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr</artifactId>
<version><timeofwriting:1.6.0></version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>
org.apache.felix.scr.annotations

</artifactId>
<version><timeofwriting:1.7.0></version>
</dependency>

Agora defina seus componentes com as anotações @Component e @Service . Quando você quiser que nenhum seja incluído, como em qualquer pacote de API, basta inserir “Service-Component: *” no arquivo osgi.bnd. Isso fará com que o plugin do pacote pare de reclamar sobre a falta de OSGI.INF para o projeto que não contém nenhum.

Espero que isso ajude alguém;)

Saúde,
Kjellski