Cette zone, je pense, a un très faible support pour le moment. OSGI ne définit pas vraiment quoi que ce soit sur le déploiement ou l'empaquetage, donc c'est à d'autres frameworks (par exemple Eclipse) de trouver leur propre façon de le faire. Si vous construisez une application RCP (Eclipse base), les systèmes Eclipse font tout ça, jusqu'à créer des exes etc. Cependant, les builds sont principalement effectués sur l'espace de travail Eclipse, les builds sans tête sont plus compliqués. Le projet Tycho tente de le rendre plus sensible en rejoignant les cycles de construction Maven et Eclipse, mais il est toujours axé sur les applications RCP plutôt que sur les OSGI génériques.
Si vous ne faites pas de RCP, ce qui est aussi mon cas, alors vous devrez probablement lancer votre propre solution, car je n'ai trouvé aucune solution générale. Voici un aperçu de ce que nous faisons:
Nous définissons un projet POM qui répertorie tous les ensembles contenus dans votre application. Tout ce projet consiste à lister les références - appelons le projet 'bundle-list'. Ensuite, nous utilisons la disposition pax pour exécuter le projet en mode développement. Ceci est réalisé en faisant de 'bundle-list' le parent du pom de provisioning du projet pax (généralement dans le dossier 'provisioning'). Ensuite, lorsque vous démarrez pax, il utilise la liste des bundles de ce projet pour démarrer OSGI. Les références de bundle dans le projet 'bundle-list' doivent être marquées comme 'fournies' pour que cela fonctionne.
Ensuite, pour créer une distribution, nous avons un autre projet. Ce projet a également le projet 'bundle-list' comme parent. Ce projet utilise divers plugins pour créer une distribution, y compris le téléchargement des jarres de bundle. La distribution inclut des scripts qui démarrent OSGI, mais ceux-ci sont écrits à la main, il n'y a pas de système pax ici.
Cela fonctionne bien pour nous de garder la liste des paquets en un seul endroit, mais il y a encore beaucoup de scripts écrits à la main, et il y a des problèmes de partage de configuration entre les deux systèmes - par exemple. fichiers de configuration, niveaux de démarrage du faisceau, etc.