2012-08-21 5 views
1

OSGi를 처음 사용합니다. Android에서 Apache Felix를 실행하고 있습니다. 나는 다음과 같이 시스템에 번들로 내보낼 시스템 패키지 설정 : 왜 누락OSGi 시스템 번들에서 내 보낸 시스템 패키지가 없습니다.

org.osgi.framework.BundleException: Unresolved constraint in bundle 
org.apache.felix.configadmin [1]: Unable to resolve 1.0: missing requirement [1.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0) 
(!(version>=2.0.0))) 

그러나

/** Packages exported by the system bundle. */ 
String SYSTEM_PACKAGES = 
    "org.osgi.framework;version=\"1.6.0\"," + 
    "org.osgi.framework.launch;version=\"1.0.0\"," + 
    "org.osgi.framework.wiring;version=\"1.0.0\"," + 
    "org.osgi.framework.startlevel;version=\"1.0.0\"," + 
    "org.osgi.framework.hooks.bundle;version=\"1.0.0\"," + 
    "org.osgi.framework.hooks.resolver;version=\"1.0.0\"," + 
    "org.osgi.framework.hooks.service;version=\"1.1.0\"," + 
    "org.osgi.framework.hooks.weaving;version=\"1.0.0\"," + 
    "org.osgi.service.packageadmin;version=\"1.2.0\"," + 
    "org.osgi.service.startlevel;version=\"1.1.0\"," + 
    "org.osgi.service.url;version=\"1.0.0\"," + 
    "org.osgi.util.tracker;version=\"1.5.0\""; 

Map map = new HashMap(); 
map.put ("org.osgi.framework.system.packages" , SYSTEM_PACKAGES); 
// I set more properties ... 
felix = new Felix (map); 
felix.start(); 

, 나는 ConfigAdmin 번들을 설치하려고, 그것은 BundleException을 제공합니다 이 요구 사항, 버전 1.6.0에서 시스템 번들에서 org.osgi.framework 패키지를 내보냈을 때? 나는 수행하여 시스템 속성이 올바르게 설정되었는지 확인했다 :

// DEBUG 
Toast.makeText (getApplicationContext() , 
       felix.getBundleContext().getProperty ("org.osgi.framework.system.packages") , 
       Toast.LENGTH_LONG).show(); 

아마 내 부분에 간단한 실수입니다. 누군가 나를 도울 수 있습니까?

감사합니다.

답변

3

왜이 작업을 수행하고 있습니까? Felix는 자동으로 해당 패키지를 시스템 번들에서 내보내야합니다.

그리고 시스템 번들에서 정상적으로 내 보낸 패키지 이외의 패키지를 내보내려면 org.osgi.framework.system.packages.extra 실행 구성 속성을 사용하십시오.

+0

나는 처음에 그렇게했다 (Felix가 나를 위해 시스템 패키지를 설정하게했다). 그러나 누락 된 요구 사항 예외를 제공하고 있기 때문에 명시 적으로 설정해야한다고 생각했습니다. 어쨌든, 오류가 다른 원인에 의해 발생한 것으로 밝혀졌습니다. 아래에 이유를 게시했습니다. –

1

문제가 해결되었습니다.

map.put ("org.osgi.framework.system.packages.extra" , ""); 

펠릭스는 빈 문자열을 허용하지 않습니다 (내가 나중에에 패키지 이름을 추가 할 생각, 처음에 빈 문자열을 사용했다) : 여분의 패키지 매개 변수를 설정하는 동안 내가 실수를했다. 이 문장을 삭제하면 문제가 없었습니다.

BJ Hargrave가 말했듯이 시스템 패키지를 설정할 필요가 없습니다.

또한 빈 문자열을지도 값으로 전달해서는 안되며 실현하지 못했습니다.

관련 문제