As práticas recomendadas acordadas para a numeração semântica de versão podem ser encontradas em https://semver.org/.
Bibliotecas comuns devem ser fatoradas em pacotes separados. Isso permite que eles sejam reutilizados em seus pacotes. Ao envolver um JAR em um pacote OSGI, verifique as fontes online para ver se alguém já fez isso antes. Alguns locais comuns para encontrar wrappers de pacote existentes são: Apache Felix, Apache Sling, Apache Geronimo, Apache ServiceMix, Eclipse Bundle Recipes e SpringSource Enterprise Bundle Repository.
Para dependências de tempo de compilação em arquivos POM, sempre dependa da versão mais baixa necessária que expõe a API necessária. Isso permite maior compatibilidade com versões anteriores e facilita as correções nas versões anteriores.
Quando um pacote é exportado, uma API é criada para que outras pessoas dependam dele. Exporte 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 foi exportado anteriormente e torná-lo privado.
Sempre coloque as implementações em uma impl pacote. Por padrão, a variável maven-bundle-plugin exporta qualquer item no projeto que não tenha uma impl em seu nome.
Isso permite que os consumidores da API evoluam junto com você. Ao fazer isso, sempre siga as práticas recomendadas de controle de versão semântico. Isso permite que os consumidores da API saibam quais tipos de alterações esperar em uma nova versão.
Especificando informações significativas de metatipo, facilita a compreensão de seus serviços e componentes no console Felix. Uma lista de anotações e atributos de SCR pode ser encontrada em: https://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html.