OSGi ( Felix ) дополнительный экспорт system.bundle

Простой эксперимент -

пакет A нуждается в том, чтобы некоторые классы com.sun.xml.internal.bind были доступны ему через загрузчик классов ( jaxb .. )

Я погуглил свой путь к теоретическому решению заставить system.bundle экспортировать com.sun.xml.internal.bind, добавив пакет в «org.osgi.framework.system.packages.extra» (стандартный параметр фреймворка, реализованный в felix , задокументировано по адресу http://felix.apache.org/site/apache-felix-framework-configuration-properties.html ) и импортировать его в свой пакет.

Таким образом, пакет больше не будет разрешаться.

Unable to resolve 5.0: missing requirement [5.0] osgi.wiring.package; (osgi.wiring.package=com.sun.xml.internal.bind)

( 5 - пакет с использованием jaxb ) Установка «org.osgi.framework.bootdelegation» для «com.sun.xml.internal.bind» и отказ от импорта его в зависимый пакет работали, как задокументировано.

Я неправильно понимаю, что должен делать system.packages.extra? Могу ли я просто не разрешать импорт из system.bundle? Я попытался явно установить system.bundle в импорте через bnd в нижней части моей директивы Import-Package.

com.sun.xml.internal.bind;bundle-symbolic-name="system.bundle",\
*

Что привело к

Unable to resolve 5.0: missing requirement [5.0] osgi.wiring.package; (&(osgi.wiring.package=com.sun.xml.internal.bind)(bundle-symbolic-name=system.bundle))

PS: я использую bnd и -runproperties для их определения. В моем файле bndrun есть:

-runproperties: osgi.console.enable.builtin=true,\
com.mycompany.manager.confDir=./etc,\
org.osgi.framework.system.packages.extra=com.sun.xml.internal.bind,\
org.osgi.service.http.port=8888

пакет, который нуждается в jaxb, определяет следующий импорт

Import-Package: com.sun.xml.internal.bind,\
    *

При попытке разрешить зависимости в редакторе bndrun я получаю

    Unable to resolve <<INITIAL>> ver=null: missing requirement (osgi.identity=com.mycompany.configuration.jaxb) [caused by: Unable to resolve com.mycompany.configuration.jaxb ver=0.0.0: missing requirement (osgi.wiring.package=com.sun.xml.internal.bind)]
org.osgi.service.resolver.ResolutionException: Unable to resolve <<INITIAL>> ver=null: missing requirement (osgi.identity=com.mycompany.configuration.jaxb) [caused by: Unable to resolve com.mycompany.configuration.jaxb ver=0.0.0: missing requirement (osgi.wiring.package=com.sun.xml.internal.bind)]
    at org.apache.felix.resolver.Candidates.populateResource(Candidates.java:285)
    at org.apache.felix.resolver.Candidates.populate(Candidates.java:153)
    at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:148)
    at biz.aQute.resolve.ResolveProcess.resolveRequired(ResolveProcess.java:34)
    at org.bndtools.core.resolve.ResolveOperation.run(ResolveOperation.java:61)
    at org.bndtools.core.resolve.ResolveJob.run(ResolveJob.java:43)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

person pgn    schedule 05.12.2013    source источник
comment
Не могли бы вы опубликовать сведения о конфигурации свойств конфигурации Framework org.osgi.framework.system.packages, org.osgi.framework.system.packages.extra, org.osgi.framework.bootdelegation? В моем случае org.osgi.framework.system.packages.extra=sun.awt,sun.misc,com.sun работает   -  person Basil    schedule 06.12.2013
comment
У вас есть правильная общая идея, но удалите атрибут bundle-symbolic-name="system.bundle" из импорта в вашем комплекте.   -  person Neil Bartlett    schedule 07.12.2013
comment
@NeilBartlett, я пробовал с и без - к сожалению, без разницы.   -  person pgn    schedule 09.12.2013


Ответы (1)


Я вижу, вы используете Bndtools. Хорошо! У нас есть специальное свойство для установки системных пакетов из файла .bndrun:

-runsystempackages: com.sun.xml.internal.bind

Я не уверен, почему это не сработало, когда вы поместили это внутрь -runproperties... возможно, просто опечатка, хотя я не смог ее обнаружить. В любом случае лучше использовать -runsystempackages, потому что тогда распознаватель Bndrun также знает, что нужно добавить эти пакеты в системный пакет; тогда вы сможете решить и в редакторе bndrun.

person Neil Bartlett    schedule 09.12.2013
comment
Да, это сработало, спасибо. Нужно было проверить параметры bndrun, они не отображаются в пользовательском интерфейсе плагина eclipse. (TBH это крайний случай) - person pgn; 09.12.2013