2009-09-30 11 views
0

Je dois mettre à disposition une bibliothèque pour certains paquets. Cette bibliothèque utilise RMI, elle a donc besoin (pour autant que je sache, au moins) d'utiliser le chargeur de classe système pour fonctionner (j'ai essayé de "osgi-fy" la bibliothèque, ce qui donne classcastexceptions à l'exécution). Donc, ce que j'ai fait était de supprimer les dépendances des bundles qui utilisent cette bibliothèque, les compiler avec la bibliothèque incluse dans la propriété jars.extra.classpath (dans le build.properties du projet eclipse).Comment configurer un package à l'échelle du système dans osgi?

Puis j'ajouté

org.osgi.framework.bootdelegation=com.blipsystems.* 

dans le fichier de configuration de felix et a commencé le conteneur felix avec la ligne de commande followin:

java -classpath lib/blipnetapi.jar -jar bin/felix.jar 

..which à tour de rôle throwed un NoClassDefFoundException pour une classe de bibliothèque blipnetapi.jar:

 
ERROR: Error starting file:/home/frza/felix/load/BlipnetApiOsgiService_1.0.0.1.jar (org.osgi.framework.BundleException: Activator start error in bundle BlipnetApiOsgiService [30].) 
java.lang.NoClassDefFoundError: com/blipsystems/blipnet/api/util/BlipNetSecurityManager 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    at java.lang.Class.getConstructor0(Class.java:2699) 
    at java.lang.Class.newInstance0(Class.java:326) 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3525) 
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:1694) 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1621) 
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1076) 
    at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.ClassNotFoundException: com.blipsystems.blipnet.api.util.BlipNetSecurityManager 
    at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:726) 
    at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:60) 
    at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1631) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 
    ... 11 more 

Donc ma question est: suis-je manquant donc méthing? J'ai fait une bêtise?

Répondre

0

Le problème se situe dans votre ligne de commande. Si vous spécifiez l'option -jar, java ignore l'option -classpath. Si vous devez spécifier un chemin de classe avec -jar, il doit être dans le manifeste du jar que vous démarrez. Ici, je voudrais simplement mettre les deux jars sur le classpath et spécifier manuellement la classe principale (jetez un coup d'oeil dans le jar Felix pour son nom exact).

Questions connexes