As práticas recomendadas para a numeração semântica de versão aprovadas podem ser encontradas em https://semver.org/.
As bibliotecas comuns devem ser integradas em pacotes separados. Isso permitirá que eles sejam reutilizados em seus pacotes. Ao vincular um JAR em um pacote OSGI, verifique as fontes online para ver se alguém já fez isso antes. Alguns locais comuns para encontrar invólucros de pacotes existentes são: Apache Felix, Apache Sling, Apache Geronimo, Apache ServiceMix, Receitas do pacote Eclipse e o Repositório do pacote SpringSource Enterprise.
Para as dependências de tempo de compilação em arquivos POM, sempre dependa da versão mais baixa necessária que exponha a API necessária. Isso permitirá uma maior compatibilidade com versões anteriores e facilitará as correções de backporting para versões mais antigas.
Assim que um pacote é exportado, criamos uma API para que outras pessoas dependam. Certifique-se de exportar o mínimo possível e verifique se o que está sendo exportado é uma API. É muito mais fácil pegar um método/classe privado e torná-lo público do que pegar algo que antes era exportado e torná-lo privado.
As implementações devem ser sempre colocadas em um pacote separado impl. Por padrão, o maven-bundle-plugin exportará qualquer item no projeto que não tenha um impl no seu nome.
Isso permitirá que os consumidores de sua API evoluam junto com você. Ao fazer isso, siga sempre as práticas recomendadas de controle de versão semântica. Isso permitirá que os consumidores de sua API saibam que tipos de alterações devem ser esperadas em uma nova versão.
Ao especificar informações significativas de metatótipo, seus serviços e componentes serão mais fáceis de entender no console do Felix. Uma lista de anotações e atributos SCR pode ser encontrada em: https://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html.