2012-08-21 4 views
1

Я новичок в OSGi. Я запускаю Apache Felix на Android. Я поставил системные пакеты для экспортируемых систем пачки, как показано ниже:Системные пакеты, не экспортируемые системным пакетом OSGi

/** 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:

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))) 

Почему отсутствуют это требование, когда я экспортировал пакет org.osgi.framework из системного пакета версии 1.6.0? Я проверил, что свойство системы был установлен правильно, выполнив:

// 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

Я делал это сначала (позволяя Феликс установить для меня системные пакеты). Но так как это объясняло недостающее требование, я думал, что должен его явно указывать. В любом случае, оказывается, что ошибка была вызвана чем-то другим - я опубликовал причину ниже. –

1

Вопрос был решен. Я делал ошибку при установке дополнительного параметра пакеты:

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

Феликс не принимает пустую строку (я использовал пустую строку сначала, думая, что я хотел бы добавить имена пакетов к нему позже). Когда я удалил это утверждение, все сработало нормально.

Как сказал BJ Hargrave, нет необходимости устанавливать системные пакеты.

Кроме того, мы не должны передавать пустые строки в качестве значений карты, я этого не осознавал.

Смежные вопросы