BND помещает один и тот же пакет в разделы экспорта и импорта manifest.mf.

У меня есть приложение Vaadin, которое я пытаюсь создать как набор пакетов OSGI с использованием Maven + BND.

Я не могу развернуть пакеты в Apache Felix, потому что некоторые зависимости не могут быть разрешены. Apache Felix жалуется, что не может найти пакет XYZ, необходимый для пакета «A», хотя этот пакет определен в этом же пакете !!

Я просмотрел файл MANIFEST.MF, созданный Maven + BND, и увидел, что пакет (XYZ) из этого пакета добавлен как в разделы «импорт», так и «экспорт». Я понимаю, почему «экспорт», но почему «импорт» ?? Почему пакет пытается импортировать собственный пакет?

мой MANIFEST.MF

Manifest-Version: 1.0
Export-Package: myexample.admin;uses:="com.vaadin.ui,myexample.webshared,
 com.vaadin.terminal,myexample.mvc.view.impl,
 myexample.mvc.model,myexample.mvc.renderer.map.impl,
 myexample.mvc.renderer,myexample.mvc.model.impl,myexample.util"
Built-By: ask
Tool: Bnd-0.0.384
Bundle-Name: admin
Created-By: 1.6.0_21 (Sun Microsystems Inc.)
Bundle-Version: 0
Build-Jdk: 1.6.0_26
Bnd-LastModified: 1315674240833
Bundle-ManifestVersion: 2
Import-Package: myexample.admin;version="1.0",myexample.mvc.model,
 myexample.mvc.model.impl,myexample.mvc.renderer,
 myexample.mvc.renderer.map.impl,myexample.mvc.view.impl,
 myexample.util,myexample.webshared,com.vaadin.terminal,com.vaadin.ui
Bundle-SymbolicName: admin
Include-Resource: ..\classes
Originally-Created-By: Apache Maven Bundle Plugin

person Alex    schedule 10.09.2011    source источник
comment
Опубликуйте свои настройки BND (osgi.bnd файл, соответствующие pom.xml части).   -  person palacsint    schedule 11.09.2011


Ответы (2)


Это правильное поведение. Объяснение находится в разделе 3.5.6 базовой спецификации OSGi.

Что касается неразрешенной ошибки Феликса ... это должно быть связано с чем-то другим. Пожалуйста, опубликуйте фактическое сообщение об ошибке.

person Neil Bartlett    schedule 10.09.2011
comment
'ОШИБКА: администратор пакета [1] Ошибка при запуске файла: / C: /1-felix/bundle/admin-1.0.jar (org.osgi.framework.BundleException: неразрешенное ограничение в администраторе пакета [1]: невозможно устранить 1.0: отсутствует требование [1.0] package; (package = myexample.mvc.model) [вызвано: Невозможно разрешить 16.0: отсутствует требование [16.0] package; (& (package = myexample.mvc.controller) (версия ›= 1.0.0 ))]) org.osgi.framework.BundleException: неразрешенное ограничение в админке пакета [1]: невозможно разрешить 1.0: отсутствует пакет требований [1.0]; (package = myexample.mvc.model) [вызвано: Невозможно разрешить 16.0: ' - person Alex; 12.09.2011
comment
отсутствует требование [16.0] package; (& (package = myexample.mvc.controller) (версия ›= 1.0.0))] - person Alex; 12.09.2011
comment
Итак, просто прочтите, что написано в сообщении об ошибке. Ваш admin пакет не может быть решен, потому что пакет myexample.mvc.model недоступен. Кажется, что этот пакет экспортирован с помощью пакета 16, но пакет 16 не может быть разрешен, потому что пакет myexample.mvc.controller недоступен. - person Neil Bartlett; 12.09.2011
comment
В комплекте 16 есть пакеты myexample.mvc.model и myexample.mvc.controller, и он экспортирует их, хотя и без указания номера версии в разделе экспорта (который, как я предполагаю, по умолчанию равен 1.0.0? ). часть импорта, с другой стороны, требует 1.0: Import-Package: myexample.mvc.controller; version = 1.0. Может ли это быть причиной? если да, то почему плагин BND сгенерировал элемент экспорта без тегов версии 1.0 при помещении его в раздел импорта? - person Alex; 12.09.2011
comment
хорошо, неважно. Я обнаружил, что некоторые пакеты были названы .impl. в коде, и BND не экспортирует их по умолчанию. Я переименовал пакеты, и это решило конкретную проблему. похоже, что сообщение об ошибке не было слишком конкретным. - person Alex; 12.09.2011
comment
Какая версия спецификации? В спецификации v4.3.0 нет раздела 3.5.6. - person Emil Lundberg; 02.07.2013
comment
@EmilLundberg Я взял этот номер раздела из спецификации ядра R4.2. Похоже, он перешел на 3.6.6 в R4.3. - person Neil Bartlett; 02.07.2013

Ниль, конечно, прав. Если честно, я очень успешно использовал noimports: = true, чтобы обойти это. В моих приложениях в разделе maven-bundle-plugin обычно есть следующее:

<Export-package>*;noimports:=true</export-package>

В результате все ваши пакеты будут экспортированы в OSGi, и ни один из них не появится в вашем разделе import-package. Если вам нужна только пара экспортированных пакетов, чтобы они не отображались в разделе import-package, вы можете установить флаг noimports для каждого отдельного пакета. Наконец, этот синтаксис взят из BND, поэтому он также должен работать в ваших файлах .bnd.

person Mike Van    schedule 13.09.2011