Question

Je développe bundles OSGi en utilisant Eclipse. Je teste le code, en utilisant une configuration d'exécution OSGi Eclipse.

Le code fonctionne très bien là, mais quand j'exporter les paquets comme des pots et essayer de les utiliser dans un autre environnement (pax-coureur, par exemple) je reçois des exceptions ClassNotFound lors de l'exécution. Les faisceaux sont installés très bien, sans erreur. J'exécute la commande sur équinoxe: « bundle numéro diag » et il dit: « Pas de contraintes non résolues » pour chaque paquet

.

Je voudrais savoir s'il y a un outil / méthode pour savoir, pour un faisceau donné .jar si elle a besoin d'une librairie externe, qui n'est pas décrit dans le manifest.mf.

Était-ce utile?

La solution

Votre paquet résoudra si tous les paquets dans Import-Package (et les faisceaux énumérés dans Require-Bundle) se trouvent à l'exécution. Si vous obtenez ClassNotFoundException ou NoClassDefFoundError après avoir résolu, cela signifie que le contenu de Import-Package avait tort.

Jetez un oeil à la outil Bnd par Peter Kriens . Cette effectue une inspection statique du bytecode compilé à partir de vos classes pour découvrir les dépendances exactes, et il génère l'instruction de Import-Package pour vous. En général, si vous utilisez Bnd, vous ne devriez jamais voir ClassNotFound / noClassDefFound moins charger dynamiquement des classes par nom, par exemple avec Class.forName().

Autres conseils

JBoss vient de sortir un outil de diagnostic fantastique Open Source sur les dépendances: http://jboss.org/tattletale

L'une des caractéristiques est d'analyser les fichiers jar par l'introspection, pour trouver toutes les dépendances qui manquent.

Je l'ai fait quelque chose comme ça un certain temps (j'étais la compilation croisée Java à .NET via IKVM, mais besoin les dépendances entre Jars) je JarAnalyzer pour créer un graphique des dépendances.

J'ai eu du succès avec l'outil shell bundlor de SpringSource. Il y a des instructions pour l'utiliser . Vous donnez un JAR, ainsi que le nom et la version pour le nouveau paquet que vous voulez créer à partir de ce JAR. Il analyse ensuite les fichiers de classe à l'intérieur du JAR et produit un manifeste de modèle qui importe les paquets dont il trouve des références à.

La partie dure travaille alors quelles dépendances sont facultatives, et quelle version de chaque paquet à dépendre. Vous devez lire le site Web, les notes de version, etc. pour la bibliothèque pour comprendre cela.

Vous obtiendrez « Pas de contraintes non résolues » si le paquet n'importe pas vraiment des paquets ou exiger d'autres paquets; jusqu'à l'exécution OSGi est concerné, le faisceau sera utilisable. Mais dès qu'il accède à une classe externe, comme dans votre cas, vous aurez la ClassNotFoundException redoutée.

L'environnement Eclipse Plug-In Development (PDE) vous donnera les erreurs de compilation si votre code utilise des classes qui ne sont pas répertoriés dans la MANIFEST.MF. exceptions ClassNotFound lors de l'exécution sont souvent causés par le marquage de manière incorrecte les importations de paquet comme option - la détermination des faisceaux, mais ils ne fonctionneront pas. Contre une version Compiler différente d'un paquet ou un paquet que vous utilisez contre pourrait également provoquer ce genre d'erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top