2017-09-11 18 views
0

J'essaie des échantillons OSGi de apache felixCausée par: java.lang.NoClassDefFoundError: org/OSGi/Cadre/BundleActivator: lors de l'importation des paquets multiples

Les premier et deuxième exemples installés et ont commencé à bien. Mais le troisième exemple où il existe une dépendance avec osgi et le service précédemment installé échoue avec une erreur de classe non trouvée.

MANIFEST.MF

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: French dictionary 
Bundle-SymbolicName: fr-dict 
Bundle-Description: A bundle that registers a French dictionary service 
Bundle-Vendor: Apache Felix 
Bundle-Version: 1.0.0 
Bundle-Activator: tutorial.example2b.Activator 
Import-Package: org.osgi.framework, 
tutorial.example2.service 

Note: J'ai donné une nouvelle ligne après la dernière ligne.

g! start file:/Users/johne/Desktop/bundle-dict-fr.jar                                         10:18:39 
org.osgi.framework.BundleException: Activator start error in bundle fr-dict [11]. 
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2289) 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2145) 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) 
    at org.apache.felix.gogo.command.Basic.start(Basic.java:739) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:136) 
    at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:91) 
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:571) 
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:497) 
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:386) 
    at org.apache.felix.gogo.runtime.Pipe.doCall(Pipe.java:417) 
    at org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:229) 
    at org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:59) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoClassDefFoundError: org/osgi/framework/BundleActivator 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2375) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2159) 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1578) 
    at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1404) 
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4505) 
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220) 
    ... 19 more 
Caused by: java.lang.ClassNotFoundException: org.osgi.framework.BundleActivator not found by fr-dict [11] 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1610) 
    at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 30 more 
java.lang.NoClassDefFoundError: org/osgi/framework/BundleActivator 

est ici lb sortie après,

g! lb                                                     10:19:40 
START LEVEL 1 
    ID|State  |Level|Name 
    0|Active  | 0|System Bundle (5.6.8)|5.6.8 
    1|Active  | 1|jansi (1.16.0)|1.16.0 
    2|Active  | 1|JLine Bundle (3.3.0)|3.3.0 
    3|Active  | 1|Apache Felix Bundle Repository (2.0.10)|2.0.10 
    4|Active  | 1|Apache Felix Gogo Command (1.0.2)|1.0.2 
    5|Active  | 1|Apache Felix Gogo JLine Shell (1.0.6)|1.0.6 
    6|Active  | 1|Apache Felix Gogo Runtime (1.0.6)|1.0.6 
    7|Active  | 1|Service listener example (1.0.0)|1.0.0 
    8|Active  | 1|English dictionary (1.0.0)|1.0.0 
    11|Resolved | 1|French dictionary (1.0.0)|1.0.0 
+0

Est-ce que votre MANIFEST.MF se termine par une nouvelle ligne? –

+0

Pouvez-vous ajouter la ligne de commande que vous utilisez pour le démarrage? – pd40

+0

'g! démarrer le fichier: /Users/johne/Desktop/bundle-dict-fr.jar ' – John

Répondre

0

Vous avez une nouvelle ligne entre les deux paquets importés:

Import-Package: org.osgi.framework, 
tutorial.example2.service 

Pouvez-vous essayer de mettre les deux sur la même ligne:

Import-Package: org.osgi.framework, tutorial.example2.service 

Je suppose que dans votre manifeste actuel le paquet d'importation est ignoré car la syntaxe est invalide. Votre bundle se résout bien mais n'importe pas de paquets. Lorsque l'activateur est ensuite exécuté, il ne trouve aucune classe externe.

+0

toujours la même erreur – John

+0

Si vos importations sont correctes, cette erreur ne devrait pas se produire. Que contient le Manifeste dans votre pot maintenant? –

+0

C'est pourquoi j'ai demandé si le MANIFEST.MF a un retour chariot. Ceci est requis dans le format manifeste et la dernière entrée peut ne pas être correctement lue si elle n'est pas là. –

0

J'ai rencontré le même problème et je l'ai corrigé en réécrivant la ligne Import-Package. À l'origine, j'ai copié-collé le fichier manifeste de sorte qu'il y a probablement un caractère illégal dedans.