Osgi eclipse: как экспортировать пакет из пакета фрагментов и сделать их видимыми для внешнего пакета?

Исходная ситуация (без ошибок):

  • У меня есть три разных пакета: пакет A (называемый org.apache.xmlbeans), пакет B и пакет C.
  • пакет B импортирует некоторые пакеты, экспортированные из пакета A
  • пакет B экспортирует некоторые пакеты (например, пакет com.prova.xsd.config)
  • пакет C импортирует пакеты, экспортированные пакетом B (например, пакет com.prova.xsd.config)

Теперь я делаю пакет B фрагментом пакета A (fragment-host), добавляя директиву Fragment-Host: org.apache.xmlbeans в МАНИФЕСТ пакета B.

После этого изменения НЕТ ошибок в MANIFEST.MF всех пакетов (A, B, C), но в классах .java пакета CI есть ошибка компиляции: «Импорт com.prova.xsd.config не может быть разрешен», связанный с импортом в начале файла .java.

В чем проблема? Как это исправить?

Большое спасибо,

Андреа


person Andrea    schedule 15.05.2014    source источник
comment
Какую IDE вы используете?   -  person Holly Cummins    schedule 16.05.2014


Ответы (1)


Вам нужно добавить «Eclipse-ExtensibleAPI: true» в манифест вашего хост-плагина A.

Из Справка Eclipse: Пакет манифеста OSGi :

Заголовок Eclipse-ExtensibleAPI

Eclipse-ExtensibleAPI используется для указания того, разрешает ли пакет хоста пакетам фрагментов добавлять дополнительный API к хосту. Этот заголовок следует использовать, если пакет хоста хочет разрешить фрагментам добавлять дополнительные пакеты в API хоста. Если этот заголовок не указан, используется значение по умолчанию «false». Обратите внимание, что этот заголовок используется только инструментами (PDE) для создания правильных путей к классам для сборки. Среда выполнения вообще не использует этот заголовок. Во время выполнения фрагменту всегда разрешено добавлять дополнительные пакеты, классы и ресурсы в API хоста. Заголовок Eclipse-ExtensibleAPI должен использовать следующий синтаксис:

Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )

Ниже приведен пример заголовка Eclipse-ExtensibleAPI:

Eclipse-ExtensibleAPI: true
person Barnski    schedule 10.09.2014