Je suis en train de refactorisation une application Java à utiliser OSGi. Une fonctionnalité de l'application est la compilation Java à la volée en utilisant javax.tools.JavaCompiler
. Dans l'application d'origine, ce processus fonctionnait en alimentant le compilateur du chemin de classe existant, comme cela. Toutefois, cela ne fonctionnera pas dans un ensemble OSGi car le chemin de classe ne contient plus les chemins nécessaires. Dans la version OSGi refacturée de l'application, le compilateur doit avoir accès aux classes qui se trouvent dans le même paquet que le code ci-dessus, ainsi qu'aux classes des autres bundles. Comment est-ce que je rends le compilateur conscient de ces classes?En utilisant JavaCompiler dans un OSGi Bundle
J'ai pensé deux solutions possibles:
- Donnez le compilateur utilisé par l'classloader le paquet contenant le code ci-dessus, car il est au courant de toutes les classes nécessaires. Cependant, cela ne semble pas une solution viable d'après ce que j'ai lu here et here.
- Générez le chemin de classe en utilisant les emplacements physiques des ensembles installés. J'ai regardé
org.osgi.framework.Bundle.getLocation()
mais je ne suis pas sûr si ce serait une solution fiable. Les chemins que je récupère (au moins lors du déploiement dans Eclipse) sont relatifs et je ne suis pas sûr qu'ils puissent être utilisés sur toutes les plates-formes et toutes les situations.
Est-ce que l'option deux ci-dessus semblent possibles? Y a-t-il une meilleure solution?
Une note plus: Je l'ai vu une approche [ici] (http://blog.linkedin.com/2008/06/12/osgi-at-linkedin-java-compilation-in-osgi/) qui apparaît pour fonctionner, mais cela dépend des classes JDT internes. D'après ce que j'ai lu, ce n'est pas une bonne pratique. –
Quelqu'un a des idées ...? –