2017-09-11 10 views
0

을 가져올 때 나는 apache felix에 의해 발생 : java.lang.NoClassDefFoundError가 : 조직/OSGI/프레임 워크/BundleActivator를 : 여러 패키지

에서 설치되는 제 1 및 제 2 예를 OSGi 프레임 샘플을 시도하고 잘 시작하고있다. 그러나 osgi 및 이전에 설치된 서비스와의 종속성이있는 세 번째 예제는 클래스를 찾을 수 없음 오류로 인해 실패합니다.

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 

참고 : 나는 마지막 줄 뒤에 새 줄을 주었다.

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

가 같은 줄에 모두 넣어 시도 할 수 있습니다 : 여기

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 

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

MANIFEST.MF는 개행 문자로 끝나나요? –

+0

시작에 사용하는 명령 줄을 추가 할 수 있습니까? – pd40

+0

'g! 파일 시작 : /Users/johne/Desktop/bundle-dict-fr.jar ' – John

답변

0

당신은이 개 수입 패키지 사이에 줄 바꿈을 가지고, 그 이후 파운드의 출력

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

구문이 유효하지 않으므로 현재 Manifest Import-Package가 무시됩니다. 따라서 번들은 정상적으로 처리되지만 패키지는 가져 오지 않습니다. 액티베이터가 실행되면 외부 클래스를 찾을 수 없습니다.

+0

여전히 같은 오류 – John

+0

가져 오기가 올바른 경우이 오류가 발생하지 않아야합니다. 항아리에있는 Manifest에는 현재 무엇이 포함되어 있습니까? –

+0

이것이 MANIFEST.MF에 후행 줄 바꾸기가 있는지 묻는 이유입니다. 이는 매니페스트 형식에서 필요하며 마지막 항목이 없으면 제대로 읽지 못할 수도 있습니다. –

0

나는 동일한 문제가 있었고 가져 오기 - 패키지 줄을 다시 작성하여 문제를 해결했습니다. 원래 매니 페스트 파일을 복사하여 붙여 넣기 때문에 불법 문자가있을 수 있습니다.