2009-09-30 3 views
0

일부 번들에 라이브러리를 제공해야합니다. 이 라이브러리는 RMI를 사용하기 때문에 (적어도 내가 아는 한) 시스템 클래스 로더를 사용하여 작업 할 수 있어야합니다 (런타임에 classcastexceptions을 발생시키는 라이브러리 "osgi-fy"를 시도했습니다). 그래서 내가 그 라이브러리를 사용하는 번들에서 의존성을 제거하고, jars.extra.classpath (Eclipse 프로젝트의 build.properties에있는) 특성에 포함 된 라이브러리로 컴파일한다. 회전에osgi에서 시스템 전체 패키지를 구성하는 방법은 무엇입니까?

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

요식의 클래스에 대한 NoClassDefFoundException을 throwed :

는 다음 나는 펠릭스 구성 파일에

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

을 추가하고 따라와 명령 줄 펠릭스 컨테이너를 시작 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 

내 질문은 다음과 같습니다. mething? 내가 잘못 했어?

답변

0

문제는 명령 줄에 있습니다. -jar 옵션을 지정하면 java는 -classpath 옵션을 + 시합니다. -jar를 사용하여 클래스 경로를 지정해야하는 경우 시작하는 jar의 매니페스트에 있어야합니다. 여기서는 클래스 패스에 항아리를 두 개 배치하고 기본 클래스를 수동으로 지정합니다. 정확한 이름은 Felix 항아리 안에 있습니다.